我对以下代码感到困惑:
Proc.new do |a|
a.something "test"
puts a.something
puts "hello"
end
运行时不会抛出任何错误。但是,puts
语句都没有打印任何内容。我对a.something
“任务”感到好奇。也许这是一个方法调用w / parens省略。 以上代码中发生了什么?
答案 0 :(得分:4)
Proc.new ... # create a new proc
Proc.new{ |a| ... } # a new proc that takes a single param and names it "a"
Proc.new do |a| ... end # same thing, different syntax
Proc.new do |a|
a.something "test" # invoke "something" method on "a", passing a string
puts a.something # invoke the "something" method on "a" with no params
# and then output the result as a string (call to_s)
puts "hello" # output a string
end
由于proc中的最后一个表达式是puts
,它总是返回nil
,proc 的返回值如果被调用将是{{1} }。
nil