有人能给我解释一下Ruby在块中使用管道字符吗?我知道它包含一个变量名,在数据迭代时,该变量名将被分配给数据.但这叫什么?管道内部是否有多个变量?还有什么我应该知道的吗?有关于它的更多信息的好链接吗?
例如:
25.times { | i | puts i }
有人能给我解释一下Ruby在块中使用管道字符吗?我知道它包含一个变量名,在数据迭代时,该变量名将被分配给数据.但这叫什么?管道内部是否有多个变量?还有什么我应该知道的吗?有关于它的更多信息的好链接吗?
例如:
25.times { | i | puts i }
大括号定义了一个匿名函数,称为块.管道之间的标记是该块的参数.参数的数量取决于块的使用方式.每次计算块时,需要该块的方法将根据调用它的对象传递一个值.
这与定义方法相同,只是它不会存储在接受块的方法之外.
例如:
def my_print(i)
puts i
end
执行时将执行与此相同的操作:
{|i| puts i}
唯一的区别是块是动态定义的,而不是存储的.
例2:
25.times &method(:my_print)
25.times {|i| puts i}
我们使用匿名块,因为作为块传递的大多数函数通常特定于您的情况,不值得定义以供重用.
那么,当一个方法接受一个块时会发生什么呢?这取决于方法.接受块的方法将通过以定义良好的方式从其调用对象传递值来调用它.返回的内容取决于需要该块的方法.
例如: In 25.times {|i| puts i}
.times calls the block once for each value between 0 and the value of its caller, passing the value into the block as the temporary variable i. Times returns the value of the calling object. In this case 25.
让我们看一看接受带有两个参数的块的方法.
{:key1 => "value1", :key2 => "value2"}.each {|key,value|
puts "This key is: #{key}. Its value is #{value}"
}
在这种情况下,每个函数都 for each 键/值对调用块函数,将键作为第一个参数传递,将值作为第二个参数传递.