小编典典

Ruby 发送与 __send__

all

我理解的概念,some_instance.send但我试图弄清楚为什么你可以同时调用它。Ruby Koans
暗示除了提供许多不同的方法来做同样的事情之外,还有一些原因。以下是两个使用示例:

class Foo
  def bar?
    true
  end
end

foo = Foo.new
foo.send(:bar?)
foo.__send__(:bar?)

有人对此有任何想法吗?


阅读 55

收藏
2022-08-15

共1个答案

小编典典

一些类(例如标准库的 socket 类)定义了自己的send方法,与Object#send.
因此,如果您想使用任何类的对象,则需要使用__send__以确保安全。

现在留下了一个问题,为什么有send而不只是__send__.
如果只有__send__名称send可以被其他类使用而不会造成任何混淆。原因是它send首先存在,后来才意识到该名称send也可能在其他上下文中有用,因此添加了(顺便说一句,这与__send__发生的事情相同)。id``object_id

2022-08-15