爲什麼下面的代碼無法產生預期的輸出,對於前兩個測試用例,如果我沒有將「then」部分添加到'If?'中我設置了第二個變量「False」的默認值,我的印象是,在Ruby中,一個方法可能帶有不確定數量的參數,並且在調用方法時缺少參數將回滾到使用默認值如果設置了方法內的那些參數。在Ruby中爲什麼If/Then邏輯寫入沒有If/Then結構失敗?
def alphabetize(arr,rev=false)
arr.sort!
if rev == true
arr.reverse!
end
end
numbers = [1,9,2,1,10]
測試用例:
print alphabetize(numbers,false)
=begin
input: numbers,false
output: nil
expected output: 1,1,2,9,10
=end
print alphabetize(numbers)
=begin
input: numbers
output: nil
expected output 1,1,2,9,10
=end
print alphabetize(numbers,true)
=begin
input: numbers,true
output: 10,9,2,1,1
expected output: 10,9,2,1,1
=end
此代碼產生預期的結果:
def alphabetize(arr,rev=false)
if rev == true
arr.sort!.reverse!
else
arr.sort!
end
end
numbers = [1,9,2,1,10]
如果是這種情況,最後的測試用例如何工作? – brooklynsweb
@brooklynsweb我已經添加了進一步的說明。讓我知道它是否合理。 – phss
這個解釋是有道理的,但後來我又寫了一個例子,它的行爲和我原本預期的一樣。有什麼不同? *不幸的是,評論字段沒有代碼格式選項;這裏有一個pastebin:http://pastebin.com/NGYYpqjB。更新:換句話說,第二個測試用例沒有返回'nil',它沒有返回任何內容,因爲如果'if'失敗,沒有定義動作。 – brooklynsweb