使用累加器時,累加器僅存在於reduce
塊中,還是存在於函數中?如何在Ruby中使用reduce/inject而不使用未定義的變量
我有一個看起來像的方法:
def my_useless_function(str)
crazy_letters = ['a','s','d','f','g','h']
str.split.reduce([]) do |new_array, letter|
for a in 0..crazy_letters.length-1
if letter == crazy_letters[a]
new_array << letter
end
end
end
return true if (new_array == new_array.sort)
end
當我執行這個代碼中,我得到的錯誤
"undefined variable new_array in line 11 (the return statement)"
我也試過new_array
值內的else
語句中賦值給另一個變量我的reduce
塊,但這給了我相同的結果。
有人可以向我解釋爲什麼會發生這種情況嗎?
尼斯,我要寫一個更有效的版本,但它會和你的非常相似。請注意,要檢查數組是否已排序,您不需要對其進行排序(例如,您可以使用'each_cons'代替 –
@Eric,也許Ruby可以使用'class Array; def排序?:enum = self.to_enum;循環{返回假如果(enum.next <=> enum.peek)== 1};真正;結束;結束; [1,2,3] .sorted? #=> true; [1,3,2] .sorted? #=> false(或者按照你的建議使用'each_cons')。 –
@CarySwoveland:'Array#sorted?'將會是具有基本循環的C函數的完美候選人。 –