0

2 つのコードを比較してください (最初のコードは false の正しい値を返し、2 番目のコードは true の値を返します)。コードの唯一の違いは %w です。%w がこの問題を引き起こすのはなぜですか?

#1
def ordered_vowel_word?(word)
  vowels = ["a", "e", "i", "o", "u"]

  letters_arr = word.split("")
  vowels_arr = letters_arr.select { |l| vowels.include?(l) }

  (0...(vowels_arr.length - 1)).all? do |i|
    vowels_arr[i] <= vowels_arr[i + 1]
  end
end

ordered_vowel_word?("complicated")

#2
def ordered_vowel_word?(word)
  vowels = %w[a, e, i, o, u]
   letters_arr = word.split("")
  vowels_arr = letters_arr.select { |l| vowels.include?(l) }

  (0...(vowels_arr.length - 1)).all? do |i|
  vowels_arr[i] <= vowels_arr[i + 1]
  end
end



ordered_vowel_word?("complicated")
4

2 に答える 2

4

コンマと一緒に使用しないでください。それが、この表記法を使用する目的の半分です。正しく:

%w[a e i o u]
于 2013-05-28T23:33:56.863 に答える
3

代わりにこれを使用してください:

vowels = %w[a e i o u]

カンマは必要ありません。

irb(main):001:0> %w[a, e, i, o, u]
=> ["a,", "e,", "i,", "o,", "u"]
irb(main):002:0> %w[a e i o u]
=> ["a", "e", "i", "o", "u"]

ご覧のとおり、%wはその内容を文字列として扱い、スペースで分割します。

于 2013-05-28T23:34:49.233 に答える