为什么要分配这个奇怪的值?

时间:2013-03-27 02:26:57

标签: ruby

class MyClass
  def fun
    a = 2
    b = 5
    yield(a,b)
  end

  def self.fun2
    puts self
  end
end

m = 1
n = 2
mine = MyClass.new
mine.fun {|m| puts "m = #{m} n = #{n}"}

这里我故意与yield的参数数量不匹配,输出是

test.rb:16: warning: multiple values for a block parameter (2 for 1)
from test.rb:5
m = 25 n = 2

这25来自哪里?

2 个答案:

答案 0 :(得分:2)

我怀疑你在1.8.x

在这种情况下,m将为[a, b]。这相当于[2, 5]

[2, 5].to_s
# => "25"

"m = #{[2, 5]} n = #{2}"
# => "m = 25 n = 2"

答案 1 :(得分:0)

25来自ab作为数组传递给m

当你puts时,这是你在Ruby 1.8中得到的输出。

您也可以尝试puts "m = #{m.inspect}...."puts "m = #{m.class.to_s}"