2012-07-03 23 views
10

Geçtiğimiz günlerde, Ruby'de dinamik olarak nesne ve yöntemler oluşturmanın oldukça başarılı olduğunu öğrendim, bunun nedeni Javascript'teki arka plan deneyimim olabilir.Javascript'te Ruby'de nesne ve yöntemleri dinamik olarak nasıl oluşturulur?

JavaScript yılında dinamik nesne oluşturabilir ve aşağıdaki gibi yöntemler var:

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

nasıl (JavaScript kadar basit) Ruby yukarıdaki ifadeleri gerçekleştirerek eşdeğer?

foo = Object.new 

def foo.bar 
    1+1 
end 
+1

Ruby'yi programladığınızda, muhtemelen JS yaklaşımlarınızın üzerinden bağlantı kurmaya çalışmamalısınız. Diller oldukça farklı nesne modellerine sahiptir, paradigmaların bir uyumsuzluğu olacaktır. –

+0

Doğru, hatırlattığın için teşekkürler. Uygulamamda yalnızca tek bir eylemde kullanılan küçük bir atma nesnesine ihtiyacım var ve belki de asıl nedeni, prosedürel bir şekilde yapmak istemediğim, oldukça tıknaz. : D –

+0

O zaman [OpenStruct] 'a bakmalısınız (http://ruby-doc.org/stdlib-1.9.3/libdoc/ostruct/rdoc/OpenStruct.html). –

cevap

10

Bu tekil yöntemlerle elde edebilirsiniz:

+0

Harika cevap. Bunu daha önce de gördüm ama bir şekilde aklımdan bile geçmedi hahaha. Teşekkürler. :) –

4

Böyle bir şey yapabilirsiniz. Örneğin, tüm nesneler ile bunu unutmayın:

str = "I like cookies!" 

def str.piratize 
    self + " Arrrr!" 
end 

puts str.piratize 

hangi çıktısı: Bu yöntemler gerçekten sadece bu tek bir nesne (dolayısıyla adı) üzerinde tanımlanan

I like cookies! Arrrr! 

, bu nedenle bu kodu (yukarıdaki kod sonra uygulanır):

undefined method `piratize' for "Cookies are great!":String (NoMethodError) 
:

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

sadece bir istisna atar

İlgili konular