3

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

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

Binding在我的测试用例设置中,@test_binding = Binding.new(@test_variable)但我得到了错误

“NoMethodError:未定义的方法new' for Binding:Class C:/Users/Tim/RubymineProjects/LPA/Tests/binding_test.rb:25:in设置”

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

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

4

2 回答 2

7

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

实际上,您在该代码中没有做错任何事情。事实是Binding该类已经存在于 Ruby 中,因此您实际上正在做的是重新打开另一个类而不是定义一个新类。

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

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

  1. 重命名类
  2. 将类放入模块

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

于 2013-06-27T02:36:54.840 回答
6

该类已经存在于 Ruby 核心中,因此您在这里所做的是重新打开现有类并添加/重新定义方法Binding由于Ruby 的Binding类 undefinesnew,它的扩展也没有它。

我建议重命名您的类,以免与 Ruby 核心类冲突。

于 2013-06-27T02:26:24.373 回答