Ruby:使用 block 迭代器的方法链接如何工作?

标签 ruby

下面的代码似乎可以工作。但我不确定为什么......据我所知, .each_charselect 方法一样采用一个代码块。所以我对 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")

如何将需要代码块的方法附加到方法上?

最佳答案

查看 String#each_char 的文档。 “将 str 中的每个字符传递到给定的 block ,或者如果没有给定 block ,则返回一个枚举器。” “如果没有给出 block ,则返回一个枚举器”这句话经常出现在 Ruby 文档中 - 这就是使“将方法堆叠在彼此之上”有用的原因。实际上这就是所谓的“方法链”。

旁注:

if word_vowels == word_vowels.sort
    return true
end

#better:

word_vowels == word_vowels.sort

关于Ruby:使用 block 迭代器的方法链接如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20669419/

相关文章:

ruby - 如何在二叉树上的 ruby​​ 中实现就地映射方法(映射!)?

ruby - 使用 Prawn PDF 和 Resque 在后台生成 pdf

sql - 在 postgresql ...query... 中加入两个单独的查询(可能或不可能)

ruby - 通过引用文档进行 Mongoid 查询

c - Ruby c 扩展 : How can I catch all exceptions, 包括不是 StandardErrors 的东西?

ruby-on-rails - RSpec:避免使用允许接收的任何实例

ruby-on-rails - Heroku上的代码崩溃在本地完美运行

ruby-on-rails - rails ActiveRecord : Saving nested models is rolled back

ruby - 注入(inject)字符串的最干净的方法

Ruby:为什么 Hash === {} 返回 true?