1
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 是从哪里来的?

4

2 回答 2

2

我怀疑你在1.8.x

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

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

"m = #{[2, 5]} n = #{2}"
# => "m = 25 n = 2"
于 2013-03-27T02:36:38.033 回答
0

25 来自a并作为数组b传递给。m

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

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

于 2013-03-27T02:30:27.273 回答