了解红宝石中的过程

时间:2012-04-10 21:12:10

标签: ruby variable-assignment proc

我对以下代码感到困惑:

Proc.new do |a|
    a.something "test"

    puts a.something
    puts "hello"
end

运行时不会抛出任何错误。但是,puts语句都没有打印任何内容。我对a.something“任务”感到好奇。也许这是一个方法调用w / parens省略。 以上代码中发生了什么?

1 个答案:

答案 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