2017-08-06 3 views
3

In meinem Kopf hatte ich immer eine ziemlich gute Idee von Wert gegenüber Referenz, die in Bezug auf Funktionen übergeben. Ich gehe durch Scala obwohl und es scheint sein Konzept des Anrufs mit Namen, ist verwandt, aber sein eigenes distinct KonzeptSind die Konzepte von call by name und by reference separate Konzepte?

Zum Beispiel in C# gibt es das Schlüsselwort ref, und in Scala gibt es den Aufruf von Name => Operator .

Es ist mein Verständnis, dass das ref-Schlüsselwort - grob gesagt zumindest - dazu dient, einen Zeiger auf ein Stück Daten zu übergeben, anstatt dieses Stück Daten selbst. Wenn Sie die Ganzzahl in der Funktion ändern, wirkt sich Integer bei der Verwendung mit einem Integer-Datentyp auch auf die angerufene Seite aus.

Aufruf mit dem Namen auf der Hand beschreibt eine Auswertungsstrategie, bei der alle Ausdrücke in einem Argument verzögert werden, bis die Ausdrücke innerhalb der Funktion verwendet werden.

Scheint mein Verständnis richtig? Wenn ja, ist es dann so, dass diese Begriffe verwandte Namen haben, oder sehe ich keinen Teil des Bildes? Vielen Dank!

Antwort

1

Sind die Konzepte von call by name und by reference separate Konzepte?

Ja. Dies sind separate Konzepte. Call-by-Name ist etwa , wenn wir bewerten; Pass-by-Referenz ist etwa was wir passieren.

Aufruf mit dem Namen bedeutet, dass das Funktionsargument jedes Mal ausgewertet wird, wenn die Funktion es verwendet, nicht bevor die Funktion es empfängt.

Call by Wert (aka nach Wert übergibt) bedeutet

  • Funktionsargument ausgewertet wird, bevor die Funktion, die sie empfängt, und
  • „der resultierende Wert wird in der Funktion zu den entsprechenden variablen gebundenen . "

call by reference (auch bekannt als durch Bezugnahme passieren) bedeutet, dass die Funktion empfängt "in eine Variable ein implizites Referenz ... eher als eine Kopie von dessen Wert."

Während call by name eine nicht-strikte Evaluierungsstrategie ist, sind call by value und call by reference zwei verschiedene strikte (eifrige) Evaluierungsstrategien.

Siehe auch https://en.wikipedia.org/wiki/Evaluation_strategy