我正在阅读“Ruby Best Practices”的第一章,并且想知道代码清单的这一部分:
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
...在这种情况下需要使用更加模糊的第一个变体?
答案 0 :(得分:3)
当一个方法是私有的时,它不能通过你的选项2格式调用,并且必须通过你的选项1格式调用。
请注意。这是你问的一般答案。它可能与特定的at
方法无关。