我有一个相当简单的课程开始:
class Binding
include Observable
def initialize(variable)
@variable = variable
@state = variable.dup
@log = Log.instance.log
end
# and so on...
在Binding
的测试用语setip中我有@test_binding = Binding.new(@test_variable)
但我收到了错误
“NoMethodError:未定义的方法
new' for Binding:Class C:/Users/Tim/RubymineProjects/LPA/Tests/binding_test.rb:25:in
setup'
我用几乎相同的标题查看了其他一些问题,但似乎都没有适用。
有谁能告诉我我做错了什么?
答案 0 :(得分:6)
Ruby核心中已经存在Binding
class,所以你在这里做的是重新打开现有的类并添加/重新定义方法。自Ruby’s Binding
class undefines new
以来,您的扩展程序也没有。
我建议将您的类重命名为不与Ruby核心类冲突。
答案 1 :(得分:4)
有谁能告诉我我做错了什么?
实际上你在那段代码中没有做错任何事。事实上,Ruby中的Binding
类already exists因此你实际上在做的是重新打开另一个类,而不是定义一个新类。
特别是Binding
类没有new
类方法,这是导致问题的原因。
您现在有两个合理的选择:
第一个暗示你必须提出另一个名字,这几乎不是你想要的。另一个可以被认为是将一个类放入您自己的模块/包/容器中,以便您区分哪些类是您的库的一部分和什么是内置的。