2014-01-15 50 views
0

我試圖降低下面一行我可以使用三元運算符,而不是while循環

def this_method(week) 
    i = 0 
    while i < array.length 
    yield(week[i]) 
    i += 1 
    end 
end 

week.each do |week| 
    puts week 
end 
+2

回答是否定的。您不能使用三元運算符來替換while循環。每個用例都有不同的用例。 – ram

+0

我能想到的唯一辦法是將while循環轉換爲函數,以便我可以調用循環 - 這是否是最好的方法? – HandDisco

+0

你爲什麼想這樣做?三元運算符可能會簡化一些操作,但經常會使您的代碼在重新訪問時難以維護/理解。 – simonmorley

回答

3

與其他人一樣,我感到困惑的例子(沒有定義array,並且this_method不會被調用)。但你當然不需要while循環。我只是用Integer#times的方法,因爲你正在做不使用數組值:

array.length.times {|i| yield week[i]} 

#each_index(其中公羊的建議)的作品一樣好。

但如果array實際上,就是要week,然後它會更簡單:

week.each {|x| yield x} 

我不知道爲什麼你要創建一個只回收#each雖然方法。

+0

嗯,我很困惑,但我認爲'數組'可以返回,在這種情況下,一個數組的方法。 –

+0

對不起,數組應該是'星期'。我一直在玩它,分配數組不同的數組。感謝您的詳細解答。 – HandDisco

+0

不客氣。 – Kal

0

沒有while循環,你不能。三元運算符是一個條件表達式,while是一個循環表達式。

但是,在Ruby中,您通常使用枚舉器,而不是使用while。您的代碼可以改寫爲

def this_method(week) 
    array.each_with_index { |item, i| yield(week[i]) } 
end 

是什麼我也不清楚,有沒有array變量從何而來。即使在你的例子中,這樣的變量也沒有定義。

+0

對不起,數組應該是'星期'。我一直在玩它,分配數組不同的數組。 – HandDisco

3

對於因爲行,您可以使用Array#each_index

array.each_index {|i| yield week[i] } 
0

if在任何形式下檢查條件只有一次。
while另一方面,可以多次檢查條件。

好吧,如果你不喜歡與普查員其他的答案,同時以不同的形式,你可以使用:

def this_method(week) 
    i = -1 
    yield(week[i]) while (i+=1) < array.length 
end 
相關問題