Ruby:使用静态方法符号发送Object#的用例是什么?

时间:2015-01-22 12:29:59

标签: ruby

我正在阅读“Ruby Best Practices”的第一章,并且想知道代码清单的这一部分:

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

...在这种情况下需要使用更加模糊的第一个变体?

1 个答案:

答案 0 :(得分:3)

当一个方法是私有的时,它不能通过你的选项2格式调用,并且必须通过你的选项1格式调用。

请注意。这是你问的一般答案。它可能与特定的at方法无关。