Ruby无法覆盖send方法

这有点难以解释,但我似乎偶尔无法覆盖我的应用程序中的’send’方法。 我正在基于EventMachine创建一个相当大的应用程序,有时,在我的代码的深处,我决定在我的一个类中定义一个’send’方法。 当我稍后尝试使用此方法时,我通常会得到类似TypeError: is not a symbol ,例如以下(恰好是由所需的AMQP gem(不是我的)引起的,但是这个问题更一般):

 Exception caught: TypeError - # is not a symbol /Users/mlartz/.rvm/gems/ruby-1.9.2-p180@rflow-component-devel/gems/amq-client-0.7.0.alpha27/lib/amq/client/queue.rb:137:in `bind' /Users/mlartz/.rvm/gems/ruby-1.9.2-p180@rflow-component-devel/gems/amqp-0.8.0.rc12/lib/amqp/queue.rb:282:in `block in bind' /Users/mlartz/.rvm/gems/ruby-1.9.2-p180@rflow-component-devel/gems/eventmachine-1.0.0.beta.3/lib/em/deferrable.rb:47:in `call' /Users/mlartz/.rvm/gems/ruby-1.9.2-p180@rflow-component-devel/gems/eventmachine-1.0.0.beta.3/lib/em/deferrable.rb:47:in `callback' 

这是违规行:

 @connection.send(Protocol::Queue::Bind.encode(@channel.id, @name, exchange_name, routing_key, nowait, arguments)) 

在这种特殊情况下,@ @connection对象的类定义了一个接收AMQ::Protocol::MethodFramesend方法。 但是,似乎以某种方式调用了默认的Object#send方法(它需要一个符号,因此是exception)。

在开发早期,我在我的一个自定义类上遇到了同样的问题,通过将“send”方法的名称更改为“send_message”解决了这个问题。

所以,由于这有点笼统,问题是,什么样的事情可能会干扰我在定义它的对象上调用自定义定义的send方法的能力?

仅供参考:我在OSX上使用Ruby 1.9.2p180。

不建议使用或覆盖send方法。 Object.send是Ruby Kernel Module中一个非常基本的方法。 我在定义Message.send类时遇到了很多问题,最后使用了另一个名称,例如Message.transmit 。 在Ruby on Rails中,它是一个保留字 。