12

最近、Rubyでオブジェクトとメソッドを動的に作成するのはかなりの作業であることがわかりました。これは、Javascriptでのバックグラウンドの経験が原因である可能性があります。

Javascriptでは、オブジェクトとそのメソッドを次のように動的に作成できます。

function somewhere_inside_my_code() {
  foo = {};
  foo.bar = function() { /** do something **/ };
};

上記のステートメントをRuby(Javascriptのように単純)で実行するのとどのように同等ですか?

4

3 に答える 3

12

これは、シングルトンメソッドで実現できます。これは、すべてのオブジェクトで実行できることに注意してください。次に例を示します。

str = "I like cookies!"

def str.piratize
  self + " Arrrr!"
end

puts str.piratize

これは出力します:

I like cookies! Arrrr!

これらのメソッドは、実際にはこの単一のオブジェクト(したがって名前)でのみ定義されているため、このコード(上記のコードの後に​​実行されます):

str2 = "Cookies are great!"
puts str2.piratize

例外をスローするだけです:

undefined method `piratize' for "Cookies are great!":String (NoMethodError)
于 2012-07-03T09:33:34.393 に答える
5

あなたはそのようなことをすることができます:

foo = Object.new

def foo.bar
  1+1
end
于 2012-07-03T09:25:36.467 に答える
3

試してみることができますOpenStructhttp ://www.ruby-doc.org/stdlib-1.9.3/libdoc/ostruct/rdoc/OpenStruct.html 、それはある意味でJavaScriptに似ていますが、メソッドではなくプロパティのみがあります。RubyとJavaScriptは、オブジェクトに対してあまりにも異なるアイデアを使用しています。

于 2012-07-03T11:20:45.060 に答える