0

私はこのようなコードを持っています:

class Foo

  # (method definitions)

  def make_hash
    {
      some_method: some_method,
      some_other_method: some_other_method 
    }
  end

end

どうすれば単純化、つまりDRYできmake_hashますか?sliceRailsのようなものが欲しいのですattributes.sliceが、通常のクラスのメソッドに適用します。

4

2 に答える 2

2

このようなものが役立ちます。

mlist = {}

Foo.instance_methods(false).each do |name|
  mlist[name] = Foo.instance_method(name)
end
于 2012-12-31T14:01:15.890 に答える
2

1つの方法は、デフォルト値ブロックを使用してハッシュを作成することです。

def methods_hash
    @methods_hash ||= Hash.new {|hash, key| hash[key] = self.class.instance_method(key) }
end

したがって、ハッシュのキーを要求するたびに、すべてをフロントロードすることなく、instance_methodが動的にロードされます。.to_sinstance_methodメソッドはオブジェクトを返すため、ニーズに合わせて、またはそれに合わせたい場合があり.to_symます。

私はその質問に興味を持っており、この方法であなたの最終目標が何であるかを知りたいと思います。

于 2012-12-31T14:15:28.680 に答える