0

たとえば、私は次のようなクラスを持っています:

class QueryDSL
  def initialize(&block)
    instance_eval &block
  end

  def ==(value)
    "bla bla '#{value}'"
  end

  def test(param)
    param + param
  end
end

および次のようなクラスクエリ:

class Query
  def self.where(&block)
    QueryDSL.new(&block)
  end
end

私はいつ実行すると思う:

Query.where{test == 9}

出力は次のようになります。

"bla bla 9 bla bla 9"

しかし、私は次のような例外を持っています:

`test': wrong number of arguments (0 for 1) (ArgumentError)

私のコードに間違いはありますか?ありがとう

4

1 に答える 1

0

あなたの問題は、QueryDSL#test引数を1つ取るように定義されているときに、引数なしでメソッドを呼び出していることです。したがって、

`test': wrong number of arguments (0 for 1) (ArgumentError)

エラー。

引数を取らないようにメソッドを変更するかtest、デフォルトを設定するparamか、ブロックに引数を指定します。

Query.where { test(6) == 9 }

==ただし、それでもオペレーターは呼び出さtestれず、QueryDSL インスタンスが返されないため、==返されるもののオペレーターが使用されます。

于 2012-04-30T04:55:55.600 に答える