0

method_missingメソッドを作成しようとしているので、メソッドを実行するときに、値を返すための一致が見つかった場合は、ハッシュをヒットしてキーを確認する必要があります。続行します。ハッシュは私が書いたSQLクエリから入力されるので、値は決して一定ではありません。

例は次のようになります

 @month_id.number_of_white_envelopes_made

ハッシュで

 @data_hash[number_of_white_envelopes_made] => 1

したがって、@ month_idは1を返します。私はこれまでこれを使用したことがなく、メソッドが欠落しているフォールバックとしてハッシュを使用している資料はあまりありません。

編集:申し訳ありませんが、ハッシュ内にメソッドが見つからない場合は、メソッドエラーが発生しないまで続行できます。

編集:申し分なく、私はハッキングしていたので、これは私が思いついたものです

 def method_missing(method)
   if @data_hash.has_key? method.to_sym
     return @data_hash[method]
   else
     super
   end
 end

もっと良い方法はありますか?

4

2 に答える 2

6

次のようなものはどうですか?

def method_missing(method_sym, *arguments, &block)
  if @data_hash.include? method_sym
    @data_hash[method_sym]
  else
    super
  end
end

そして、常に対応するrespond_toを追加することを忘れないでください?あなたのオブジェクトに:

def respond_to?(method_sym, include_private = false)
  if @data_hash.include? method_sym
    true
  else
    super
  end
end
于 2012-04-25T11:23:43.537 に答える
2

最短は

class Hash
  def method_missing(sym,*)
    fetch(sym){fetch(sym.to_s){super}}
  end
end

最初に試行hash[:key]し、次にhash["key"]

于 2013-03-05T09:18:21.687 に答える