2013-06-27 107 views
2

我有一个相当简单的类开始:未定义的方法“新”

class Binding 
    include Observable 
    def initialize(variable) 
    @variable = variable 
    @state = variable.dup 
    @log = Log.instance.log 
    end 
    # and so on... 

在测试用例SETIP为Binding我有@test_binding = Binding.new(@test_variable),但我得到的错误

"NoMethodError: undefined method new' for Binding:Class C:/Users/Tim/RubymineProjects/LPA/Tests/binding_test.rb:25:in setup'

我已经看了一些其他的问题在这里几乎相同的标题,但没有一个似乎适用。

有人可以告诉我我做错了什么吗?

回答

4

Can anybody tell me what I'm doing wrong?

其实你没有在代码中做任何错误。事实上,Ruby中的Bindingalready exists因此您实际上正在做的是重新打开另一个类而不是定义一个新类。

特别是Binding类没有new类方法,这是问题的原因。

你现在二人合理的选择:

  1. 重命名类
  2. 把全班学生分成模块

第一意味着你必须拿出另外一个名字,这是几乎没有你想要的。另一个可以被认为是将一个类放入你自己的模块/包/容器中,以便区分哪些类是你的库的一部分,哪些是内置的。

6

Binding class已经存在于Ruby核心中,所以你在这里做的是重新打开现有的类并添加/重新定义方法。由于Ruby’s Binding class undefines new,您的扩展没有它。

我建议将你的类重命名为不与Ruby核心类冲突。

+0

谢谢,我没有意识到,已经有一个绑定类。 – digitig