请比较2个代码(第一个返回正确的false值,而第二个返回值为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")
答案 0 :(得分:4)
您不应该使用逗号。这是使用这种表示法的一半目的。正确地:
%w[a e i o u]
答案 1 :(得分: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
会将其内容视为字符串并按空格分割。