সম্ভবত দুটি প্রধান পার্থক্য রয়েছে:
রুবির মার্জিত, বেনামে বন্ধ রয়েছে।
রেলগুলি তাদের ভাল ব্যবহার করতে ব্যবহার করে। এখানে একটি উদাহরণ:
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
বেনামে বন্ধ হওয়া / ল্যাম্বডাসগুলি এমন নতুন ভাষার বৈশিষ্ট্যগুলিকে অনুকরণ করতে আরও সহজ করে যা ব্লকগুলি গ্রহণ করে। পাইথনে, ক্লোজারগুলি বিদ্যমান, তবে ব্যবহারের জন্য তাদের অবশ্যই নামকরণ করা উচিত। সুতরাং নতুন ভাষার বৈশিষ্ট্যগুলি অনুকরণ করতে ক্লোজারগুলি ব্যবহার করতে সক্ষম হওয়ার পরিবর্তে, আপনি কোনও ক্লোজার ব্যবহার করছেন এমন বিষয়ে আপনাকে স্পষ্ট হতে বাধ্য হতে হবে।
রুবির ক্লিনার রয়েছে, মেটাপোগ্র্যামিং ব্যবহার করা সহজ।
এটি রেলগুলিতে ব্যাপকভাবে ব্যবহৃত হয়, মূলত এটি ব্যবহার করা কত সহজ because সুনির্দিষ্টভাবে বলতে গেলে, রুবিতে, আপনি শ্রেণীর প্রসঙ্গে নির্বিচারে কোডটি কার্যকর করতে পারেন। নিম্নলিখিত স্নিপেটগুলি সমতুল্য:
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
উভয় ক্ষেত্রেই আপনি তা করতে পারেন:
Bar.new.hello
যা "হেল্লো" মুদ্রণ করবে। class_eval
পদ্ধতি নামেও একটি বর্গ তৈরি করা হচ্ছে একটি স্ট্রিং লাগে তাই এটা মাছি উপর পদ্ধতি তৈরি করতে সম্ভব, যে প্যারামিটার পাস উপর ভিত্তি শব্দার্থবিদ্যা বিভিন্নমুখী হয়েছে।
আসলে, পাইথন (এবং অন্যান্য ভাষায়ও) এই ধরণের রূপক কাজ করা সম্ভব, তবে রুবির একটি লেগ আপ রয়েছে কারণ রূপক প্রোগ্রামিং কোনও বিশেষ স্টাইল নয়। এটি এ থেকে প্রবাহিত হয় যে রুবিতে, সমস্ত কিছুই একটি বস্তু এবং কোডের সমস্ত লাইন সরাসরি সম্পাদন করা হয়। ফলস্বরূপ, Class
এসগুলি নিজেরাই বস্তু, শ্রেণি সংস্থাগুলির ক্লাসের self
দিকে নির্দেশ রয়েছে এবং আপনি যখন তৈরি করছেন তখন ক্লাসের পদ্ধতিগুলিকে কল করতে পারেন।
এটি কারাগারে সম্ভাব্য ডিগ্রিবিজ্ঞানের ডিগ্রির জন্য বৃহত্তর ডিগ্রী এবং এর জন্য আমরা কী কীওয়ার্ড বা নতুন ব্লক ভাষার বৈশিষ্ট্যগুলির মতো দেখতে নতুন ঘোষণামূলক বৈশিষ্ট্যগুলি কার্যকর করতে সক্ষম হয়েছি।