2013-03-27 45 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

您使用的是什麼版本的ruby? – 2013-03-27 02:31:28

+0

對不起,它實際上是1.8.7 ...我有我的Linux 1.9.2,我目前在我的Mac ... – OneZero 2013-03-27 02:44:01

回答

2

我懷疑你是在1.8.x

在這種情況下,m將是[a, b]。這相當於[2, 5]

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

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

好猜猜版本號。 – 2013-03-27 02:45:23

0

25來自ab作爲數組傳遞給m

當你使用puts時,這就是你在Ruby 1.8中得到的輸出。

您也可以嘗試做puts "m = #{m.inspect}...."puts "m = #{m.class.to_s}"

相關問題