匿名函数
Ruby 的 block 可以被视为一种匿名函数(nameless function)或方法(method),并且其最常用于提供迭代列表项或范围值的一种方式。如果你之前从未遇到过匿名函数,这可能听起来像官方话(gobbledygook)。幸运的是,到本章结束时,事情会变得更加清晰。让我们回顾一下前面给出的简单示例。我说一个 block 就像一个匿名函数。以此块为例:
{ |i|
puts( i )
}
如果它作为普通的 Ruby 方法来编写,它看起来可能像这样:
def aMethod( i )
puts( i )
end
要调用该方法三次并将从 0 到 2 的值传递给它,我们可能会这样写:
for i in 0..2
aMethod( i )
end
当你创建一个匿名方法(即 block),在竖线之间声明的变量(例如 |i|
)可以像命名方法的参数一样对待。我们将这些变量称为“块参数”(block parameters)。
再看看我之前的示例:
3.times { |i|
puts( i )
}
整数的 times
方法将从 0 到具体整数值减去 1 的值传递给块。
所以:
3.times{ |i| }
…非常像:
for i in 0..2
aMethod( i )
end
主要区别在于第二个示例必须调用其它一些命名方法来处理 i
的值,而第一个示例使用匿名方法(花括号之间的代码)来处理 i
。