Không chắc chắn 100% nếu đây là một trận đấu chính xác, nhưng tôi nghĩ ít nhất nó cũng đủ gần theo nghĩa chung để chỉ ra nơi nào có thể được sử dụng để phá vỡ hoặc thay đổi quy tắc phạm vi.
Ngôn ngữ Ruby xuất hiện lớp ERB templating, ví dụ trong Rails được sử dụng để tạo các tệp html. Nếu bạn sử dụng nó trông như thế này:
require 'erb'
x = 42
template = ERB.new <<-EOF
The value of x is: <%= x %>
EOF
puts template.result(binding)
Các binding
tay truy cập vào các biến cục bộ vào lệnh gọi phương thức ERB, vì vậy nó có thể truy cập chúng và sử dụng chúng để điền vào mẫu. (Mã giữa các EOF là một chuỗi, phần nằm giữa <% =%> được đánh giá là mã Ruby bởi ERB và sẽ khai báo phạm vi của chính nó giống như một hàm)
Một ví dụ Rails thậm chí còn chứng minh điều này tốt hơn. Trong một trình điều khiển bài viết, bạn sẽ tìm thấy một cái gì đó như thế này:
def index
@articles = Article.all
respond_to do |format|
format.html
format.xml { render :xml => @posts }
end
end
Sau đó, tệp index.html.erb có thể sử dụng biến cục bộ @articles
như thế này (trong trường hợp này việc tạo đối tượng ERB và ràng buộc được xử lý bởi khung Rails, vì vậy bạn không thấy nó ở đây):
<ul>
<% @articles.each do |article| %>
<li><%= article.name</li>
<% end %>
</ul>
Vì vậy, bằng cách sử dụng một biến liên kết, Ruby cho phép chạy một và cùng một mã mẫu trong các bối cảnh khác nhau.
Lớp ERB chỉ là một ví dụ về việc sử dụng. Ruby nói chung cho phép có được trạng thái thực thi thực tế với các ràng buộc biến và phương thức bằng cách sử dụng ràng buộc Kernel #, rất hữu ích trong bất kỳ bối cảnh nào bạn muốn đánh giá một phương thức trong ngữ cảnh khác nhau hoặc muốn giữ bối cảnh để sử dụng sau này.