http://rubymonk.com/learning/books/1/problems/148-array_of_fixnumrubymonk「數組中的所有元素都是Fixnum」?
紅寶石僧表明:
def array_of_fixnums?(array)
array.all? { |x| x.is_a? Fixnum }
end
即精細和所有,但是下面的代碼工作在IRB 1.9.2但當rubymonk經過一個空數組失敗:
def array_of_fixnums?(array)
result = false
array.each { |n|
if n.is_a? Fixnum
result = true
else
result = false
end }
result
end
這裏是irb輸出:
1.9.2-p320 :001 > array_of_fixnums? []
=> false
這裏是什麼rubymonk說,關於我的解決方案:
returns 'true' for [1,2,3] ✔
returns 'false' for ['a',1,:b] ✔
returns 'true' for []
RSpec::Expectations::ExpectationNotMetError
expected false to be true
我不知道爲什麼會這樣?
更新基於答案:
def array_of_fixnums?(array)
result = true
array.each { |n| return false unless n.is_a? Fixnum }
result
end
謝謝。這更有意義。那麼,爲什麼我們要給空陣列帶來疑問的好處呢?它似乎處於量子狀態,它不是Fixnums的數組,也不是一組不是Fixnums的數組? – cheshirecatalyst
@cheshirecatalyst確實,你可以在那裏合理地爭論真假。我真正能夠說的是,真正的是「所有」類型算法的傳統默認值,可能是因爲它是最明顯的實現。 (相反,'any?'默認爲false,大概是出於同樣的原因。) – Chuck
再次感謝,這有助於澄清問題^ _ ^ – cheshirecatalyst