2013-03-27 2 views
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}"} 

Здесь я намеренно не совпадать с количеством параметров доходности, а на выходеПочему это странное значение назначено?

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

Где это 25 взялось?

+0

Какую версию рубина вы используете? –

+0

извините, что это на самом деле 1.8.7 ... У меня 1.9.2 на моем Linux, и я нахожусь на моем mac ... – OneZero

ответ

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 из a и b передано m в виде массива.

Когда вы puts, это результат, который вы получаете в Ruby 1.8.

Вы также можете попробовать сделать puts "m = #{m.inspect}...." или puts "m = #{m.class.to_s}"

Смежные вопросы