संभवतः दो प्रमुख अंतर हैं:
रूबी में सुरुचिपूर्ण, अनाम क्लोजर हैं।
रेल उन्हें अच्छे प्रभाव के लिए उपयोग करती है। यहाँ एक उदाहरण है:
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
बेनामी क्लोजर / लैम्ब्डा से नई भाषा की विशेषताओं का अनुकरण करना आसान हो जाता है जो ब्लॉक ले जाएगा। पायथन में, क्लोजर मौजूद हैं, लेकिन उनका उपयोग करने के लिए उनका नाम होना चाहिए। इसलिए नई भाषा सुविधाओं का अनुकरण करने के लिए क्लोजर का उपयोग करने में सक्षम होने के बजाय, आप इस तथ्य के बारे में स्पष्ट होने के लिए मजबूर हैं कि आप एक क्लोजर का उपयोग कर रहे हैं।
रूबी में क्लीनर है, मेटाप्रोग्रामिंग का उपयोग करना आसान है।
यह रेल में बड़े पैमाने पर उपयोग किया जाता है, मुख्य रूप से इसका उपयोग करने के लिए कितना आसान है। विशिष्ट होने के लिए, रूबी में, आप वर्ग के संदर्भ में मनमाना कोड निष्पादित कर सकते हैं। निम्नलिखित स्निपेट समतुल्य हैं:
class Foo
def self.make_hello_method
class_eval do
def hello
puts "HELLO"
end
end
end
end
class Bar < Foo # snippet 1
make_hello_method
end
class Bar < Foo; end # snippet 2
Bar.make_hello_method
दोनों मामलों में, आप तब कर सकते हैं:
Bar.new.hello
जो "HELLO" प्रिंट करेगा। class_eval
विधि के रूप में भी एक वर्ग बनाया जा रहा है, एक स्ट्रिंग लेता है तो यह मक्खी पर तरीकों बनाने के लिए संभव है, यह है कि पैरामीटर में पारित कर रहे हैं के आधार पर अर्थ विज्ञान भिन्न है।
यह वास्तव में, पायथन (और अन्य भाषाओं, भी) में इस प्रकार के मेटाप्रोग्रामिंग को करना संभव है, लेकिन रूबी के पास एक पैर है क्योंकि मेटाप्रोग्रामिंग प्रोग्रामिंग की एक विशेष शैली नहीं है। यह इस तथ्य से बहता है कि रूबी में, सब कुछ एक वस्तु है और कोड की सभी लाइनों को सीधे निष्पादित किया जाता है। नतीजतन, Class
es स्वयं ऑब्जेक्ट हैं, क्लास बॉडीज़ self
की क्लास में एक पॉइंटिंग होती है, और आप क्लास में तरीकों को कॉल कर सकते हैं क्योंकि आप एक बना रहे हैं।
यह रेल्स में डिक्लेरेशनिटी की डिग्री के लिए जिम्मेदार बड़ी डिग्री है, और जिस आसानी से हम नए डिक्लेक्टिव फीचर्स को लागू करने में सक्षम हैं, जो कीवर्ड या नए ब्लॉक लैंग्वेज फीचर्स की तरह दिखते हैं।