1

http://rubymonk.com/learning/books/1/problems/148-array_of_fixnum

Ruby monk は次のように提案しています。

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
4

2 に答える 2