4

アクセサー (Ruby のようなプロパティ) が終了しない場合に呼び出される Ruby クラスに追加できる、デフォルトのメソッドまたはクラス アクセサーはありますか? 次に、データベースから読み取った配列リストのように応答するカスタム コードを記述できます。このコードでは、アクセサー コードを記述しなくても、アクセサーのように値にアクセスできます (データベースから読み取った場合は不明であるため)。

Ruby MRI 1.9 の使用

ありがとうございました!

4

1 に答える 1

10

はい、それは呼ばれていmethod_missingます; 未定義のメソッドが使用されるたびに呼び出されます。これを使用して、アクセサーを含む任意のメソッドを追加またはエミュレートできます。

たとえば、これをにスローするHashと、ハッシュの内容をプロパティとして扱うことができます。

h = {}
def h.method_missing(*args)
    if args.length == 1
        self[args[0]]
      elsif args.length == 2 and args[0].to_s =~ /^(.*)=$/
        self[$1.intern] = args[1]
      else
        super
      end
    end

書きましょう:

h.bob = "Robert"

if h.bill == "William" ...

より通常のh[:bob] = ...スタイルに加えて、以下同様です。

于 2009-03-11T20:46:57.280 に答える