Có thể có hai điểm khác biệt chính:
Ruby có kiểu đóng cửa thanh lịch, ẩn danh.
Rails sử dụng chúng để có hiệu quả tốt. Đây là một ví dụ:
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
Các bao đóng / lambdas ẩn danh giúp dễ dàng hơn trong việc mô phỏng các tính năng ngôn ngữ mới sẽ chiếm các khối. Trong Python, các bao đóng tồn tại, nhưng chúng phải được đặt tên để được sử dụng. Vì vậy, thay vì có thể sử dụng bao đóng để mô phỏng các tính năng ngôn ngữ mới, bạn buộc phải nói rõ về thực tế là bạn đang sử dụng bao đóng.
Ruby có lập trình siêu nhỏ gọn gàng hơn, dễ sử dụng hơn.
Điều này được sử dụng nhiều trong Rails, chủ yếu vì nó dễ sử dụng. Cụ thể, trong Ruby, bạn có thể thực thi mã tùy ý trong ngữ cảnh của lớp. Các đoạn mã sau là tương đương:
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
Trong cả hai trường hợp, bạn có thể thực hiện:
Bar.new.hello
sẽ in "HELLO". Các class_eval
phương pháp cũng mất một String, vì vậy nó có thể tạo ra các phương pháp một cách nhanh chóng, như là một lớp đã được tạo ra, mà đã ngữ nghĩa dựa trên các thông số được thông qua năm khác nhau.
Trên thực tế, có thể thực hiện kiểu lập trình siêu mẫu này bằng Python (và các ngôn ngữ khác), nhưng Ruby có một bước tiến vì lập trình siêu mẫu không phải là một kiểu lập trình đặc biệt. Nó bắt nguồn từ thực tế là trong Ruby, mọi thứ đều là một đối tượng và tất cả các dòng mã đều được thực thi trực tiếp. Do đó, Class
bản thân các lớp là các đối tượng, các phần thân của lớp có một self
trỏ tới Lớp và bạn có thể gọi các phương thức trên lớp khi bạn đang tạo một lớp.
Điều này ở mức độ lớn chịu trách nhiệm về mức độ khai báo có thể có trong Rails và sự dễ dàng mà chúng tôi có thể triển khai các tính năng khai báo mới giống như từ khóa hoặc các tính năng ngôn ngữ khối mới.