Ich bin mir nicht 100% sicher, ob dies eine exakte Übereinstimmung ist, aber ich denke, dass es im Allgemeinen zumindest nahe genug kommt, um zu zeigen, wo es nützlich sein kann, um Regeln für den Geltungsbereich zu brechen oder zu ändern.
Die Ruby-Sprache ist die Vorlagenklasse ERB, die beispielsweise in Rails zum Generieren von HTML-Dateien verwendet wird. Wenn Sie es verwenden, sieht es so aus:
require 'erb'
x = 42
template = ERB.new <<-EOF
The value of x is: <%= x %>
EOF
puts template.result(binding)
Die binding
Hände greifen auf lokale Variablen des ERB-Methodenaufrufs zu, damit sie darauf zugreifen und sie zum Füllen der Vorlage verwenden können. (Der Code zwischen den EOFs ist eine Zeichenfolge, der Teil zwischen <% =%> wird von ERB als Ruby-Code ausgewertet und deklariert seinen eigenen Bereich wie eine Funktion.)
Ein Rails-Beispiel zeigt dies noch besser. In einem Artikel-Controller finden Sie ungefähr Folgendes:
def index
@articles = Article.all
respond_to do |format|
format.html
format.xml { render :xml => @posts }
end
end
Die Datei index.html.erb könnte dann die lokale Variable @articles
wie folgt verwenden (in diesem Fall werden die Erstellung eines ERB-Objekts und die Bindung vom Rails-Framework verwaltet, sodass Sie sie hier nicht sehen):
<ul>
<% @articles.each do |article| %>
<li><%= article.name</li>
<% end %>
</ul>
Durch die Verwendung einer Bindungsvariablen ermöglicht Ruby die Ausführung ein und desselben Vorlagencodes in verschiedenen Kontexten.
Die ERB-Klasse ist nur ein Anwendungsbeispiel. Ruby ermöglicht es im Allgemeinen, den tatsächlichen Ausführungsstatus mit Variablen- und Methodenbindungen mithilfe der Kernel # -Bindung abzurufen. Dies ist sehr nützlich in jedem Kontext, in dem Sie eine Methode in einem anderen Kontext auswerten oder einen Kontext für die spätere Verwendung beibehalten möchten.