Tidak 100% yakin jika ini adalah pasangan yang tepat, tapi saya pikir setidaknya sudah cukup dekat dalam arti umum untuk menunjukkan di mana itu mungkin berguna untuk melanggar atau mengubah aturan pelingkupan.
Bahasa Ruby datang dengan ERB templating class, yang misalnya dalam Rails digunakan untuk menghasilkan file html. Jika Anda menggunakannya terlihat seperti ini:
require 'erb'
x = 42
template = ERB.new <<-EOF
The value of x is: <%= x %>
EOF
puts template.result(binding)
The binding
tangan akses ke variabel lokal ke ERB pemanggilan metode, sehingga dapat mengaksesnya dan menggunakannya untuk mengisi template. (Kode antara EOF adalah string, bagian antara <% =%> dievaluasi sebagai kode Ruby oleh ERB dan akan menyatakan ruang lingkupnya sendiri seperti fungsi)
Contoh Rails lebih baik menunjukkan hal ini. Di pengontrol artikel, Anda akan menemukan sesuatu seperti ini:
def index
@articles = Article.all
respond_to do |format|
format.html
format.xml { render :xml => @posts }
end
end
File index.html.erb kemudian dapat menggunakan variabel lokal @articles
seperti ini (dalam hal ini pembuatan objek ERB dan pengikatan ditangani oleh kerangka Rails, jadi Anda tidak melihatnya di sini):
<ul>
<% @articles.each do |article| %>
<li><%= article.name</li>
<% end %>
</ul>
Jadi dengan menggunakan variabel yang mengikat, Ruby memungkinkan untuk menjalankan satu dan kode templat yang sama dalam konteks yang berbeda.
Kelas ERB hanya satu contoh penggunaan. Ruby memungkinkan secara umum untuk mendapatkan status eksekusi aktual dengan pengikatan variabel dan metode dengan menggunakan pengikatan Kernel #, yang sangat berguna dalam konteks apa pun di mana Anda ingin mengevaluasi suatu metode dalam konteks yang berbeda atau ingin menyimpan konteks untuk penggunaan nanti.