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行うと、Ruby1.8で得られる出力になります。

また、やってみることができますputs "m = #{m.inspect}...."またはputs "m = #{m.class.to_s}"

于 2013-03-27T02:30:27.273 に答える