-1

Ruby Module Mixin メタプログラミング スペルを使用してメソッド名(:key) を定義するとします (独自の小さな DSL を作成します)。

module MyDsl

  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods
    def mymethod(name)

      # name("key") 
      method_name = "#{name}".to_sym
      define_method(method_name) do |arg|
         # ...
      end

    end
  end

end

メソッドを定義するにはどうすればよいですか

name[:key]
name[:key]=val
name[:key]+=3
name[:key]++

等々

Ruby の define_method(method_name) で [] 配列 / ハッシュ アクセスを指定し、値の設定、値のインクリメントなどを行う構文は何ですか?

4

1 に答える 1

1

メソッドは、メソッドと定義済みnameのオブジェクトを返す必要があります。は単なるショートカットで、Ruby にはありません。[][]=+=++

のほとんどのメソッドをHash利用できるようにする必要がある場合は、ハッシュを使用するか、サブクラス化を検討するDelegateClass(Hash)か、SimpleDelegator

于 2012-06-15T22:37:21.893 に答える