2011-09-02 70 views
2

好吧,我的問題不是很清楚,但我想要做的是以下幾點:如何獲得對「動態」對象調用的引用?

average = [1, 2, 3].inject(0) { |sum, el| sum + el }/this.size 

上面的代碼不會因爲荒謬調用這個的工作,但我想完成就是獲得對我要調用的數組的引用。 (在這種情況下[1,2,3]),鑑於我對Ruby的無知,我使用了這個。但是,你能告訴我怎麼做對嗎? 是否有可能在沒有變量引用的情況下執行它?

在此先感謝!

+0

可能與:http://stackoverflow.com/questions/4341161/is-there-a-ruby-method-that-just-returns-the-value-of-a-block –

回答

4

紅寶石裏沒有這個最近的東西是自我。

這裏有一些例子來幫助你的方式

#example 1 not self needed numbers is the array 

numbers = [1, 2, 3] 

numbers.reduce(:+).to_f/numbers.size 

# example 2 using tap which gives access to self and returns self 
# hence why total variable is needed 

total = 0 
[1, 2, 3].tap {|a| total = a.reduce(:+).to_f/a.size } 

# instance_eval hack which accesses self, and the block after do is an expression 
# can return the average without an extra variable 

[1, 2, 3].instance_eval { self.reduce(:+).to_f/self.size } # => 2.0 

到目前爲止,我寧願例如1

+0

沒錯...但他希望沒有可變的參考。這是主要的要求... – lucapette

+0

lucapette是正確的。我正在和Ruby一起玩這個遊戲,我想知道如果我能做到,就像我描述的那樣。謝謝 ! – jlstr

+0

那麼,在你的最新情況下,表達式會返回一個數組,而不是平均計算的浮點值。 – jlstr

0

「這個」不引用數組,這樣就不會在所有的工作。我認爲不可能像你聲明的那樣獲得對數組的引用。但是你永遠不會遇到這樣的問題,因爲如果數組被硬連線到這樣的代碼中,那麼除數也可能是太多,所以你可以在最後寫'/ 3'。

在一般情況下,你有一個未知大小的數組,你也可以爲數組命名,所以你可以使用它。像:

a = [1, 2, 3] 
average = a.inject(0) {|sum, el| sum+el}/a.size 
+0

所以,簡單的回答是,ruby沒有這樣的能力? 我同意我肯定不會需要它。我只是想知道該語言是否有語法。 – jlstr