这有点难以解释,但我似乎偶尔无法覆盖我的应用程序中的“发送”方法。我正在基于 EventMachine 创建一个相当大的应用程序,有时,在我的代码深处,我决定在我的一个类中定义一个“发送”方法。当我稍后尝试使用此方法时,通常会得到一个类似于 的异常TypeError: <parameter> is not a symbol
,例如以下内容(可能是由所需的 AMQP gem(不是我的)引起的,但这个问题更笼统):
Exception caught: TypeError - #<AMQ::Protocol::MethodFrame:0x000001008434f0 @payload="\x002\x00\x14\x00\x00\x01a\tamq.topic\x00\x01\x00\x00\x00\x00", @channel=1> 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
对象的类定义了一个send
方法,该方法接受AMQ::Protocol::MethodFrame
. 然而,似乎以某种方式Object#send
调用了默认方法(它需要一个符号,因此是异常)。
在开发的早期,我在我的一个自定义类上遇到了同样的问题,通过将我的“发送”方法的名称更改为“发送消息”来解决这个问题。
所以,由于这有点笼统,问题是,什么样的事情会干扰我send
在定义它的对象上调用自定义方法的能力?
仅供参考:我在 OSX 上使用 Ruby 1.9.2p180。