In meinen Prinzipien der Programmierklasse sprechen wir über verschiedene Aufrufmethoden. Einige diskutierten wir:
Ich kann kein Beispiel dafür finden, wie call by name funktioniert. Möchte mir jemand ein Beispiel geben? Ich denke, wenn Sie eine XML-Datei als Eingabe verwenden, ist ähnlich , um nach Namen zu rufen. Könnte mir jemand ein traditionelleres Beispiel geben?
Ich werde in einer hypothetischen Programmiersprache arbeiten. Nehmen wir an, wir haben eine Funktion p(x)
, die x ausgibt und dann zurückgibt. Jetzt definieren wir eine Funktion:
Nun wollen wir es mit einigen Argumenten aufrufen:
%Vor% x
und y
werden für die Parameter ersetzt, so dass der Aufruf von foo
oben zu folgendem führt:
Wir drucken also 456 auf den Bildschirm und geben 457 zurück. In einer anderen Auswertungsstrategie würden wir zuerst die Funktionsparameter auswerten (Drucken von 123 und 456 auf den Bildschirm im Prozess) und dann 456 für y
ersetzen. im Funktionskörper, der schließlich 457 zurückgibt.
Es ist erfunden, aber ich hoffe, Sie bekommen die Idee. Es geht um Substitution.
Bei Aufruf nach Wert werten Sie Argumente aus und rufen Werte ab, die dann an die Funktion übergeben werden.
foo(bar())
wird als arg = bar();
ausgewertet, dann wird foo (arg) aufgerufen, und im Rumpf der Funktion ist diese neu zugeordnete arg-Variable zugänglich, modifizierbar, ...
Beim Aufruf nach Name ersetzen Sie im Körper der Funktion alle Referenzen auf Argumente durch ihren Code , die während des Aufrufs verwendet wurden. Dann wertet man den Körper aus und bewertet die Argumente.
foo(bar())
mit foo(arg) { return arg; }
wird als foo(arg) { return bar(); }
Aufruf nach Name funktioniert als Aufruf über Referenz , wenn der aktuelle Parameter Skalierer ist, aber unterschiedlich, wenn der aktuelle Parameter Ausdruck oder ist Array Dann wird der tatsächliche Parameter bei jedem Zugriff neu ausgewertet.
Hier ist ein einfaches Beispiel
%Vor%Tags und Links theory callbyname