Max*_*Max 11 ruby lambda enumerable detect proc
Enumerable#detect返回块计算结果的数组的第一个值true.它有一个可选的参数,需要响应call并在这种情况下被调用,返回它的值.所以,
(1..10).detect(lambda{ "none" }){|i| i == 11} #=> "none"
Run Code Online (Sandbox Code Playgroud)
为什么我们需要lambda?为什么我们不直接传递默认值,因为(在我的测试中)lambda无论如何都不能有任何参数?像这样:
(1..10).detect("none"){|i| i == 11} #=> "none"
Run Code Online (Sandbox Code Playgroud)
与Ruby中的所有事物一样,“最不惊讶的原则”也适用。当然,这并不是说“让您感到最惊讶”。Matz坦率地说这实际上意味着什么:
每个人都有自己的背景。有人可能来自Python,其他人可能来自Perl,并且他们可能对该语言的不同方面感到惊讶。然后他们走过来对我说:“我对该语言的这一功能感到惊讶,因此Ruby违反了最少惊讶的原则。” 等待。等待。最少惊喜的原则不只适合您。最少惊喜的原则意味着最少我的惊喜的原则。很好地学习Ruby之后,这意味着最不惊讶的原则。例如,在我开始设计Ruby之前,我是一名C ++程序员。我只用C ++编程了两三年。经过两年的C ++编程,它仍然让我感到惊讶。
因此,这实际上是任何人的猜测。
一种可能性是,它允许或与您要有条件地运行某些昂贵商品的用例保持一致:
arr.detect(lambda { do_something_expensive }) { |i| is_i_ok? i }
Run Code Online (Sandbox Code Playgroud)
或者如@majioa所暗示的那样,也许要传递一个方法:
arr.detect(method(:some_method)) { |i| is_i_ok? i }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1488 次 |
| 最近记录: |