2013-06-27 151 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