目前在Ruby中学习更多有关Lambdas的知识,并且遇到了一个我觉得非常有趣的例子:
[106] pry(main)> def another_method
[106] pry(main)* begin
[106] pry(main)* lambda { return "Hello World" }
[106] pry(main)* ensure
[106] pry(main)* puts "another_method exits"
[106] pry(main)* end
[106] pry(main)* end
=> :another_method
[107] pry(main)> another_method
another_method exits
=> #<Proc:0x000001013d2af0@(pry):149 (lambda)>
[108] pry(main)> another_method.call
another_method exits
=> "Hello World"
现在我对此的理解是,lambda被执行,保存值并且只在请求时返回它(.call)?
这引出了以下问题:
def some_method
a = lambda { return "hello" }
b = lambda { return "there" }
end
如果你有上面的场景,有没有办法可以选择调用哪一个并获得它的值?因为如果我这样做,我得到以下内容:
some_method.call => "there"
有关这方面的任何提示,如果可能的话,会很棒!谢谢!
答案 0 :(得分:1)
试试这个例子:
def some_method(n)
a = lambda { return "hello" }
b = lambda { return "there" }
n % 2 == 0 ? a : b
end
你应该得到以下信息:
some_method(2).call
=> "hello"
some_method(1).call
=> "there"
我会试着解释一下我认为你缺少的东西:
在下面的代码中,调用some_method将始终返回b
的值,因为它是要执行的最后一行。 (您的其他示例中的代码中的代码不计算在内)
def some_method
a = lambda { return "hello" }
b = lambda { return "there" }
end
所以,当您执行some_method.call
时,您将获得b.call
这就是我的例子说明在lambdas =)
之间进行选择的方式