モジュール "私はクラス"製品 "に含める"電卓 "を呼び出すことができます。 Calculatorは、クラスメソッドをProductにコピーする "Product"を継承します。これらのクラスメソッドの1つは、 "memoize"です。私はこのような何かをすることができるというアイデアです:クラスメソッドのエイリアスメソッドを動的に定義するにはどうすればよいですか?
module Calculator
def self.extended(base)
base.memoize :foo_bar
end
end
メソッド(特にクラスメソッド)をメモする目的で:foo_bar。私はmemoizeの中で、クラスメソッドを別の名前(ここではfoo_bar)にエイリアスしようとする "alias_method"メソッドを呼び出します。これは失敗します。これはmemoize経由で呼び出され
module Calculator (the extended module)
def memoize(name)
alias_method "memoized_#{name}", name
end
end
:foo_barは、alias_methodラインはエラーと言って製品が何のメソッド「名前」..私の理解はこれがあるalias_methodは、インスタンスメソッドの別名しようとしているためであるがありません蹴るMemoizeは何かのように見えますクラスメソッド...(私はなぜけどOK大したことない知らない)。..
私はそう
module Calculator
def memoize(name)
class << self
alias_method "memoized_#{name}", name
end
end
end
ようeigenclassこれはうまくいく再度開くことができませんが、名前はの範囲に使用できません。クラス< <エルフの定義。人々はself.class_evalとself.instance_evalを使って言及しましたが、どちらもうまくいかないようです。私は自分のケーキを食べたいと思っています。どうすればalias_methodを動的に保つことができますか?class_methodsで使用できますか?
エイリアシングされる方法が実際に状況ではありませんでしたが、モジュール内で拡張され、試行されたエイリアシングの前に拡張されました。しかし、偉大な考え。 – Inc1982