2013-05-28 95 views
0

請比較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") 
+3

您是否考慮過設置「元音」的值? –

回答

4

您不應該使用逗號。這是使用這種表示法的一半目的。正確:

%w[a e i o u] 
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將把它的內容看作一個字符串並且按空格分開。