364 Stimmen

Was ist die apply-Funktion in Scala?

Ich habe es nie verstanden, von den konstruierten unmarshalling und verbing Substantive ( an AddTwo Klasse hat eine apply das sind zwei mehr!) Beispiele.

Soweit ich weiß, handelt es sich dabei um syntaktischen Zucker, der (wie ich aus dem Kontext schließe) entwickelt wurde, um einen Code intuitiver zu machen.

Welche Bedeutung hat eine Klasse mit einem apply Funktion geben? Wofür wird sie verwendet, und für welche Zwecke macht sie den Code besser (Unmarshalling, Verbing Nomen usw.)?

Wie hilft es, wenn es in einem Begleitobjekt verwendet wird?

2voto

seanhalle Punkte 893

Die apply-Methode verwandelt ein Objekt in eine Funktion. Der Wunsch ist es, eine Funktionssyntax zu verwenden, wie z. B.:

f(args)

Aber Scala hat sowohl eine funktionale als auch eine objektorientierte Syntax. Die eine oder die andere muss die Basis der Sprache sein. Scala wählt (aus einer Vielzahl von Gründen) die objektorientierte Form als Basis der Sprache. Das bedeutet, dass jede Funktionssyntax in eine objektorientierte Syntax übersetzt werden muss.

Hier kommt die Anwendung ins Spiel. Jedes Objekt, das über die apply-Methode verfügt, kann mit dieser Syntax verwendet werden:

f(args)

Die Scala-Infrastruktur übersetzt das dann in

f.apply(args)

f.apply(args) hat eine korrekte objektorientierte Syntax. Eine solche Übersetzung wäre nicht möglich, wenn das Objekt keine apply-Methode hätte!

Kurz gesagt, die apply-Methode in einem Objekt zu haben, ermöglicht es Scala, die Syntax: object(args) in die Syntax: object.apply(args) zu verwandeln. Und object.apply(args) ist in der Form, die dann ausgeführt werden kann.

Zu Ihrer Information: Dies impliziert, dass alle Funktionen in Scala Objekte sind. Und es bedeutet auch, dass die apply-Methode ist, was ein Objekt eine Funktion macht!

In der akzeptierten Antwort finden Sie weitere Informationen darüber, inwiefern eine Funktion ein Objekt ist und welche Tricks dabei angewendet werden können.

0voto

Özgür Punkte 7782

Um es grob zu formulieren,

Sie können es einfach als benutzerdefiniert sehen ()operator . Wenn eine Klasse X hat eine apply() Methode, immer wenn Sie die X() rufen Sie die apply() Methode.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X