Ruby:带有静态方法符号的 Object#send 的用例是什么?

标签 ruby

我正在阅读“Ruby 最佳实践”的第一章,并且想知道这部分代码 list :

def text_at(*args) # inside class BlogTest
  args.inject(@feed) { |s,r| s.send(:at, r) }.inner_text
end

@feedNokogiri::XML::Node 的一个实例(表示一个 XML 文档),该方法用于从这样的节点中检索文本:

self.text_at('rss', 'title')
# same as @feed.at('rss').at('title').inner_text

到目前为止,还不错。但是为什么 text_at() 使用 Object#send 呢? ...之间有什么区别?

s.send(:at, r) # option 1
s.at(r)        # option 2

...在这种情况下需要使用更晦涩的第一个变体吗?

最佳答案

当一个方法是私有(private)的时,它不能通过您的选项 2 格式调用,必须通过您的选项 1 格式调用。

注意。这是对您所问内容的一般回答。它可能与特定的 at 方法无关。

关于Ruby:带有静态方法符号的 Object#send 的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28088816/

相关文章:

Ruby Dir.存在吗?未定义的方法

ruby-on-rails - Controller 最佳实践 : Multiple Methods or Multiple cases in Show

ruby-on-rails - Rails 帮助查找方法

ruby - 在Ruby IO中处理SystemCallErrors的正确方法是什么?

ruby - 在失败时阻止文件而不阻止 Ruby 进程

ruby-on-rails - 在 RSpec 中,如何以任意顺序期望具有不同参数的多条消息?

javascript - 将 Ruby Red 编译为 javascript 的生产用法

ruby-on-rails - 验证时区在 Rails 中是否有效

ruby - 在 ruby​​ 中,file.readlines.each 并不比 file.open.each_line 快,为什么?

ruby - 从 ActiveRecord 迁移中读取 database.yml