我注意到||=
的一些有趣用法如下 -
array_1 ||= begin
(1..5).to_a.map {|el| el*10}
end
puts array_1.to_s # [10,20,30,40,50]
所以我执行了以下修改版本 -
array_2 ||= def some_method
(1..5).to_a.map {|el| el*10}
end
puts array_2 # prints nothing
puts array_2.class # NilClass
puts some_method.to_s # [10,20,30,40,50]
array_2
初始化为nil
?some_method
对象调用array_2
?如何?这就是我对问题2的所作所为
array_2 ||= "We've got #{def some_method;(1..5).to_a.map {|el| el*10};end;array_2.send(:some_method)}"
puts array_2 # We've got [10, 20, 30, 40, 50]
答案 0 :(得分:1)
方法定义表达式(def
)的返回值是实现定义的。大多数Ruby实现只是从nil
表达式返回def
,但Rubinius返回包含在CompiledMethod
对象中的方法的已编译代码。
答案 1 :(得分:1)
当你声明任何方法时,它只会返回nil
,但是当你调用任何方法时,它将返回该方法中最后一行返回的o / p,除非你使用了return关键字。
以下应该适合你
def some_method
return (1..5).to_a.map {|el| el*10}
end
array_2 ||=some_method