Ruby块采用数组或多个参数
发布时间:2020-12-17 01:51:09 所属栏目:百科 来源:网络整理
导读:今天我很惊讶地发现 ruby自动找到作为块参数给出的数组的值. 例如: foo = "foo"bar = "bar"p foo.chars.zip(bar.chars).map { |pair| pair }.first #= ["f","b"]p foo.chars.zip(bar.chars).map { |a,b| "#{a},#{b}" }.first #= "f,b"p foo.chars.zip(bar.c
今天我很惊讶地发现
ruby自动找到作为块参数给出的数组的值.
例如: foo = "foo" bar = "bar" p foo.chars.zip(bar.chars).map { |pair| pair }.first #=> ["f","b"] p foo.chars.zip(bar.chars).map { |a,b| "#{a},#{b}" }.first #=> "f,b" p foo.chars.zip(bar.chars).map { |a,b,c| "#{a},#{b},#{c}" }.first #=> "f," 我原以为最后两个例子会出现某种错误. >这是ruby中更一般概念的一个例子吗? 解决方法
Ruby的块函数对它们有一个怪癖,即如果你在包含数组的东西上进行迭代,你可以将它们扩展为不同的变量:
[ %w[ a b ],%w[ c d ] ].each do |a,b| puts 'a=%s b=%s' % [ a,b ] end 这种模式在使用Hash#each时非常有用,并且你想要突破该对的键和值部分:每个{| k,v | …}在Ruby代码中很常见. 如果你的块有多个参数并且迭代的元素是一个数组,那么它会切换参数的解释方式.你可以随时强制扩展: [ %w[ a b ],%w[ c d ] ].each do |(a,b)| puts 'a=%s b=%s' % [ a,b ] end 这对于事情更复杂的情况很有用: [ %w[ a b ],%w[ c d ] ].each_with_index do |(a,b),i| puts 'a=%s b=%s @ %d' % [ a,i ] end 因为在这种情况下,它迭代一个数组和另一个被添加的元素,所以每个项实际上是一个内部形式为%w [a b],0的元组,如果你的块只接受一个参数,它将被转换为数组. 这与定义变量时可以使用的原理大致相同: a,b = %w[ a b ] a # => 'a' b # => 'b' 这实际上为a和b分配了独立的值.对比: a,b = [ %w[ a b ] ] a # => [ 'a','b' ] b # => nil (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |