Muhtemelen iki büyük fark vardır:
Ruby'nin zarif, anonim kapanışları vardır.
Raylar bunları iyi bir etki için kullanır. İşte bir örnek:
class WeblogController < ActionController::Base
def index
@posts = Post.find :all
respond_to do |format|
format.html
format.xml { render :xml => @posts.to_xml }
format.rss { render :action => "feed.rxml" }
end
end
end
Anonim kapatmalar / lambdalar, blokları alacak yeni dil özelliklerini taklit etmeyi kolaylaştırır. Python'da kapatmalar vardır, ancak kullanılmaları için adlandırılmaları gerekir. Dolayısıyla, yeni dil özelliklerini taklit etmek için kapanışları kullanabilmek yerine, bir kapanış kullandığınızı açıkça belirtmek zorundasınız.
Ruby daha temiz ve kullanımı daha kolay meta programlamaya sahiptir.
Bu, öncelikle kullanımının ne kadar kolay olduğu nedeniyle Rails'te yaygın olarak kullanılır. Daha spesifik olmak gerekirse, Ruby'de sınıf bağlamında rastgele kod çalıştırabilirsiniz. Aşağıdaki parçacıklar eşdeğerdir:
class Foo
def self.make_hello_method
class_eval do
def hello
puts "HELLO"
end
end
end
end
class Bar < Foo
make_hello_method
end
class Bar < Foo; end
Bar.make_hello_method
Her iki durumda da şunları yapabilirsiniz:
Bar.new.hello
"MERHABA" yazdıracak. class_eval
O anında yöntemleri oluşturmak mümkündür böylece bir sınıf oluşturulurken olarak yöntem ayrıca, bir String alır içinde geçirilen parametrelere dayalı anlambilimini farklı bildirildi.
Aslında, Python'da (ve diğer dillerde de) bu tür bir meta programlamayı yapmak mümkündür, ancak Ruby'nin bir ayağı vardır çünkü meta programlama özel bir programlama tarzı değildir. Ruby'de her şeyin bir nesne olduğu ve tüm kod satırlarının doğrudan çalıştırıldığı gerçeğinden kaynaklanır. Sonuç olarak, Class
es kendileri nesnelerdir, sınıf gövdeleri self
Sınıfı işaret eder ve bir tane oluştururken sınıfta yöntemler çağırabilirsiniz.
Bu, Rails'de mümkün olan bildirimsellik derecesinden ve anahtar kelimeler veya yeni blok dil özellikleri gibi görünen yeni bildirimsel özellikleri uygulayabilmemizin kolaylığından büyük ölçüde sorumludur.