有人可以向我解释Ruby在块中使用管道字符吗?据我所知,它包含一个变量名称,在迭代时将为其分配数据.但是这叫什么呢?管道内可以有多个变量吗?还有什么我应该知道的吗?有关它的更多信息的任何良好链接?
例如:
25.times { | i | puts i }
Run Code Online (Sandbox Code Playgroud)
EmF*_*mFi 27
大括号定义一个匿名函数,称为块.管道之间的标记是该块的参数.所需的参数数量取决于块的使用方式.每次计算块时,需要块的方法将根据调用它的对象传递一个值.
它与定义方法相同,只是它不存储在接受块的方法之外.
例如:
def my_print(i)
puts i
end
Run Code Online (Sandbox Code Playgroud)
执行时将执行相同的操作:
{|i| puts i}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是块是在运行中定义而不是存储.
示例2:以下陈述是等效的
25.times &method(:my_print)
25.times {|i| puts i}
Run Code Online (Sandbox Code Playgroud)
我们使用匿名块,因为作为块传递的大多数函数通常特定于您的情况,并且不值得定义以供重用.
那么当一个方法接受一个块时会发生什么?这取决于方法.接受块的方法将通过以明确定义的方式从其调用对象传递值来调用它.返回的内容取决于需要块的方法.
例如:In 25.times {|i| puts i}.times为0和其调用者的值之间的每个值调用一次块,将值作为临时变量i传递给块.Times返回调用对象的值.在这种情况下25.
让我们看一下接受带有两个参数的块的方法.
{:key1 => "value1", :key2 => "value2"}.each {|key,value|
puts "This key is: #{key}. Its value is #{value}"
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,每个键都会为每个键/值对调用块1,将键作为第一个参数传递,值作为第二个参数.
管道指定由调用块的函数填充值的参数.可以有零个或多个,你应该使用多少取决于你调用的方法.
例如,each_with_index使用两个变量并将元素放在其中一个中,将索引放在另一个中.