No estoy 100% seguro de si esto es una coincidencia exacta, pero creo que al menos se acerca lo suficiente en un sentido general para mostrar dónde puede ser útil para romper o cambiar las reglas de alcance.
El lenguaje Ruby viene con la clase de plantillas ERB, que por ejemplo en Rails se usa para generar archivos html. Si lo usa se ve así:
require 'erb'
x = 42
template = ERB.new <<-EOF
The value of x is: <%= x %>
EOF
puts template.result(binding)
Las binding
manos acceden a las variables locales a la llamada al método ERB, por lo que puede acceder a ellas y usarlas para completar la plantilla. (El código entre los EOF es una cadena, la parte entre <% =%> evaluada como código Ruby por ERB y declararía su propio alcance como una función)
Un ejemplo de Rails lo demuestra aún mejor. En un controlador de artículos, encontrará algo como esto:
def index
@articles = Article.all
respond_to do |format|
format.html
format.xml { render :xml => @posts }
end
end
El archivo index.html.erb podría usar la variable local @articles
como esta (en este caso, la creación de un objeto ERB y el enlace son manejados por el marco Rails, por lo que no lo verá aquí):
<ul>
<% @articles.each do |article| %>
<li><%= article.name</li>
<% end %>
</ul>
Entonces, mediante el uso de una variable de enlace, Ruby permite ejecutar el mismo código de plantilla en diferentes contextos.
La clase ERB es solo un ejemplo de uso. Ruby permite en general obtener el estado real de ejecución con enlaces de variables y métodos mediante el uso del enlace Kernel #, que es muy útil en cualquier contexto en el que desee evaluar un método en un contexto diferente o desee mantener un contexto para su uso posterior.