如何解决Ruby无法覆盖send方法
| 这有点难以解释,但有时似乎无法覆盖应用程序中的\'send \'方法。我正在基于EventMachine创建一个相当大的应用程序,有时,在我代码的深处,我决定在我的一个类中定义一个'send \'方法。以后当我尝试使用此方法时,通常会出现一个类似于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))
在这种情况下,“ 3”对象的类定义了一个“ 4”方法,该方法采用了“ 5”。但是,似乎以某种方式调用了默认的Object#send
方法(它需要一个符号,因此是例外)。
在开发的早期,我在一个自定义类中遇到了同样的问题,可以通过将'send'方法的名称更改为'send_message \'来解决。
所以,这有点笼统,问题是,什么样的事情会干扰我在定义该对象的对象上调用自定义send
方法的能力?
仅供参考:我在OSX上使用Ruby 1.9.2p180。
解决方法
不建议使用或覆盖
send
方法。 Object.send是Ruby Kernel Module中非常基本的方法。定义Message.send
类时,我曾经遇到过严重的问题,最终使用了另一个名称,例如Message.transmit
。在Ruby on Rails中,它是保留字。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。