3

私はかなり単純なクラスを持っています:

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設定」

ここで、ほぼ同じタイトルの他の質問をいくつか見ましたが、どれも当てはまらないようです。

誰が私が間違っているのか教えてもらえますか?

4

2 に答える 2

7

誰が私が間違っているのか教えてもらえますか?

実際、あなたはそのコードで何も悪いことをしていません。実際、BindingクラスはすでにRuby に存在するため、実際に行っていることは、新しいクラスを定義するのではなく、別のクラスを再度開いていることです。

特に、Bindingクラスにはクラス メソッドがありませんnew。これが問題の原因です。

現在、2 つの合理的な選択肢があります。

  1. クラスの名前を変更する
  2. クラスをモジュールに入れる

1 つ目は、別の名前を考え出す必要があることを意味しますが、これはほとんど望んでいません。もう 1 つは、独自のモジュール/パッケージ/コンテナーにクラスを配置して、ライブラリの一部であるクラスと組み込みのクラスを区別することと考えることができます。

于 2013-06-27T02:36:54.840 に答える
6

Bindingクラスはすでに Ruby コアに存在するため、ここで行っているのは、既存のクラスを再度開き、メソッドを追加/再定義することです。Ruby のBindingクラスは undefinesnewであるため、その拡張にもありません。

Ruby コア クラスと競合しないように、クラスの名前を変更することをお勧めします。

于 2013-06-27T02:26:24.373 に答える