我正在阅读“Ruby 最佳实践”的第一章,并且想知道这部分代码 list :
def text_at(*args) # inside class BlogTest
args.inject(@feed) { |s,r| s.send(:at, r) }.inner_text
end
@feed
是 Nokogiri::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/