Beim Aufrufen einer Funktion in Scala werden die Funktionsargumente zu Klassenvariablen für den FunctionN-Typ, der instanziiert wird?Werden Scala-Funktionsargumente zu Klassenvariablen?
1
A
Antwort
1
Ich nehme an, mit der Funktion meinen Sie eine anonyme Funktion, denn dann wird ein FunctionN-Typ instanziiert.
Die Apply-Methode von functionN wird mit den Funktionsargumenten aufgerufen, die laut den Dokumenten "den Rumpf dieser Funktion auf das Argument anwenden".
Bedenken Sie:
object Main {
def main(args: Array[String]): Unit = {
def anonFun = (x: Int) => x
anonFun(5)
}
}
Wenn Sie an der Bytecode aussehen erzeugt Sie so etwas wie die folgenden sehen werden:
INVOKESPECIAL com/mf/Main$.anonFun$1()Lscala/Function1;
ICONST_5
INVOKEINTERFACE scala/Function1.apply$mcII$sp (I)I
invokespecial lädt die anonyme Funktion, dann ist die Konstante 5 geladen und Die Methode apply der Funktion1 wird mit der Konstante aufgerufen.
Verwandte Themen
- 1. Wann werden Klassenvariablen geladen?
- 2. Klassenvariablen werden irgendwie geändert
- 3. Ruby-Klassenvariablen werden nicht automatisch viviert?
- 4. php wie Klassenvariablen im Skript angezeigt werden?
- 5. Es6-Klassenvariablen
- 6. Dynamische Klassenvariablen
- 7. XCode-Klassenvariablen
- 8. Android - Verknüpfung und Objekt zu einer Klassenvariablen
- 9. Korrekte Art, gemeinsam genutzte Klassenvariablen zu speichern?
- 10. Pygame Klassenvariablen
- 11. Anonyme Klassenvariablen
- 12. Ruby-Klassenvariablen
- 13. Klassenvariablen - Ausrichtung
- 14. Referenzzahl der Klassenvariablen verstehen
- 15. Doxygen: Wie Klassenvariablen in PHP zu beschreiben?
- 16. Angular 2 Zuweisen von Klassenvariablen zu Ergebnissen
- 17. Ruby-Access-Klassenvariablen leicht
- 18. Lebensdauer der statischen Klassenvariablen
- 19. Promise-Rückgabedaten können der Klassenvariablen nicht zugewiesen werden?
- 20. Python-Klassenvariablen oder @property
- 21. Parameter vs. Attribute (Klassenvariablen)?
- 22. Einstellung PHP-Klassenvariablen
- 23. PHP Klassenvariablen zwischen Instanzen
- 24. Python 3.5 Klassenvariablen
- 25. Typescript Wie Array-Werte in Klassenvariablen konvertiert werden
- 26. Wie kann in dieser Situation auf Klassenvariablen zugegriffen werden?
- 27. Private Klassenvariablen werden nicht geändert, wenn Funktion aufgerufen wird
- 28. Sind "Klassenvariablen" auf Null initialisiert?
- 29. fillOval() nimmt keine Klassenvariablen?
- 30. Öffentliche Klassenvariablen festlegen
Ist dies 2,11 oder 2,12? Irgendwie hatte ich erwartet, dass es in 2.12 mit der neuen Java8-lambda-kompatiblen Kodierung anders aussieht. –
@ JörgWMittag Ich lief es in 2.11, aber in 2.12 ist der Bytecode, den ich präsentierte, der gleiche. Was anders ist, ist in 2.11 eine neue anonyme Klasse erstellt, wo anonFun $ 1 definiert ist, aber in 2.12 Java8 INVOKEDYNAMIC wird verwendet, um einen Lambda-Ausdruck zu erstellen. Es ist also anders, nur nicht im eigentlichen Bereich, wo die anon-Funktion aufgerufen wird. –
Danke für die Information! –