2012-07-03 9 views
10

私は最近、Rubyでオブジェクトやメソッドを動的に作成することはかなりの仕事であることを発見しました。これはJavascriptでの私のバックグラウンド経験のためかもしれません。JavascriptのようにRubyでオブジェクトとそのメソッドを動的に作成する方法は?

JavaScriptでは、あなたは、動的にオブジェクトを作成することができ、それは以下のような方法です:

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

方法である(JavaScriptでのような簡単なもの)Rubyで上記のステートメントを達成するのと同等?

foo = Object.new 

def foo.bar 
    1+1 
end 
+1

Rubyをプログラミングするときは、おそらくJS手法を移植するべきではありません。言語にはかなり異なるオブジェクトモデルがあり、パラダイムの不一致があります。 –

+0

それは正しいです、思い出させるために感謝します。私は、アプリ内の単一のアクション内でのみ使用される小さなスローアウェイオブジェクトを必要とするだけであり、おそらく主な理由は手続き的なやり方ではしたくないということです。 :D –

+0

[OpenStruct](http://ruby-doc.org/stdlib-1.9.3/libdoc/ostruct/rdoc/OpenStruct.html)を見てください。 –

答えて

10

あなたは、これはシングルトンメソッドを達成することができます:

+0

偉大な答え。私はそれを前に見たことがありますが、どういうわけかそれは私の心を超えていません。ありがとう。 :) –

4

あなたはそのような何かを行うことができます。あなたは、たとえば、すべてのオブジェクトでこれを行うことができますことに注意してください:

出力します
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) 
関連する問題