以下代码似乎有效。我不确定为什么......据我所知.each_char
采用代码块和select
方法一样。所以我是Ruby的新人并且如果之前已经问过这个问题就道歉。
以下是代码:
def word_test(word)
vowels = ["a","e","i","o","u"]
word_vowels = Hash.new()
word_vowels = word.to_s.each_char.select {|char| vowels.include?(char)}
if word_vowels == word_vowels.sort
return true
end
end
word_test("hello")
如何将需要代码块的方法附加到方法上?
答案 0 :(得分:3)
查看String#each_char的文档。 “将str中的每个字符传递给给定的块,如果没有给出块,则返回一个枚举器。”在Ruby文档中经常出现这个frase“或返回枚举器(如果没有给出块”) - 这就是使这种“堆叠方法在彼此之上”有用的原因。实际上它被称为“方法链”。
旁注:
if word_vowels == word_vowels.sort
return true
end
#better:
word_vowels == word_vowels.sort
答案 1 :(得分:1)
each_char
要么为一个字符串中的每个字符调用一个块,要么返回一个可用于其他目的的Enumerator对象。在这种情况下,看起来这是一种从字符串中选择所有元音的圆形方式。
一种更有效的方法是:
def test_word(word)
word.match(/[aeiou]/i)
end
这基本上是一次性完成的。如果使用正确,正则表达式非常强大。