未定义的方法'新'

时间:2013-06-27 02:21:06

标签: ruby

我有一个相当简单的课程开始:

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'

我用几乎相同的标题查看了其他一些问题,但似乎都没有适用。

有谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:4)

  

有谁能告诉我我做错了什么?

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

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

您现在有两个合理的选择:

  1. 重命名课程
  2. 将课程纳入模块
  3. 第一个暗示你必须提出另一个名字,这几乎不是你想要的。另一个可以被认为是将一个类放入您自己的模块/包/容器中,以便您区分哪些类是您的库的一部分和什么是内置的。