Non sicuro al 100% se si tratta di una corrispondenza esatta, ma penso che almeno si avvicini abbastanza in senso generale per mostrare dove può essere utile per infrangere o cambiare le regole di scoping.
Il linguaggio Ruby viene fornito con la classe di template ERB, che per esempio in Rails viene utilizzato per generare file html. Se lo usi, assomiglia a questo:
require 'erb'
x = 42
template = ERB.new <<-EOF
The value of x is: <%= x %>
EOF
puts template.result(binding)
Il binding
consente l'accesso alle variabili locali alla chiamata al metodo ERB, in modo che possa accedervi e utilizzarli per riempire il modello. (Il codice tra gli EOF è una stringa, la parte tra <% =% > valutata come codice Ruby da ERB e dichiara il proprio ambito come una funzione)
Un esempio di Rails lo dimostra ancora meglio. In un controller articolo, potresti trovare qualcosa di simile a questo:
def index
@articles = Article.all
respond_to do |format|
format.html
format.xml { render :xml => @posts }
end
end
Il file index.html.erb potrebbe quindi utilizzare la variabile locale @articles
come questa (in questo caso la creazione di un oggetto ERB e il binding sono gestiti dal framework Rails, quindi non lo vedi qui) :
<ul>
<% @articles.each do |article| %>
<li><%= article.name</li>
<% end %>
</ul>
Quindi usando una variabile di binding, Ruby permette di eseguire uno e lo stesso codice template in diversi contesti.
La classe ERB è solo un esempio di utilizzo. Ruby consente in generale di ottenere lo stato effettivo di esecuzione con binding di variabili e metodi mediante l'associazione Kernel #, che è molto utile in qualsiasi contesto in cui si desidera valutare un metodo in un contesto diverso o si desidera mantenere un contesto per un uso successivo.