In Scala, was ist der Grund, dass Sie nicht "neu" verwenden müssen, um eine neue "Fallklasse" zu erstellen? Ich habe versucht, jetzt für eine Weile ohne Antworten zu suchen.Warum "Fallklasse" braucht nicht "neu", um ein neues Objekt zu erstellen
Antwort
Wollen Sie die wie oder warum? Wie die andere Antwort bemerkt, ist die wie nur die apply
Methode auf dem automatisch generierten Begleitobjekt.
Für die warum: Fallklassen werden häufig verwendet algebraic data types in Scala zu implementieren und der new
-weniger Konstruktor ermöglicht Code, eleganter ist (Wert Schaffung von mehr sieht aus wie es über Pattern-Matching, zum Beispiel Dekonstruktion) und das ähnelt mehr ADT-Syntax in anderen Sprachen.
Fallklasse hat vorgefertigte Companion-Objekt mit apply()
implementiert. Jemand beschwert sich auch darüber nach: How to override apply in a case class companion :)
Fallklassen bieten Ihnen eine automatisch generierteapply
Funktion auf ihrem Companion-Objekt, das Sie wie einen Konstruktor verwenden können.
In Scala Bytecode dekompilierten werden Sie apply
Funktion wie die folgende erstellt finden:
object Person {
def apply(name: String, age: Integer): Person = new Person(name,age)
}
Beispiel:
case class Person(name: String, age: Integer)
Die folgenden drei alle das gleiche tun.
val p0 = new Person("Frank", 23) // normal constructor
val p1 = Person("Frank", 23) // this uses apply
val p2 = Person.apply("Frank", 23) // using apply manually
Also, wenn Sie val p1 = Person("Frank", 23)
verwenden ist es kein Konstruktor, ist dies ein Verfahren, das Verfahren anzuwenden nennen.
Bitte lesen Sie scala-object-apply-functions für weitere Informationen.
- 1. Warum array.push() wird verwendet, um ein Objekt zu erstellen?
- 2. Automapper: Eigenschaftswerte aktualisieren, ohne ein neues Objekt zu erstellen
- 3. Multi nicht neu erstellen nicht Objekt
- 4. Wo sollte ich Änderungen in meiner iPhone-Ansicht speichern, um ein Objekt neu zu erstellen?
- 5. Sparql Abfrage, um ein neues Diagramm zu erstellen
- 6. Warum Copy-Konstruktor ist nicht das temporäre Objekt zu kopieren, um das neu definierte Objekt namens
- 7. Warum wird "neu" verwendet, um ein Javascript-Array zu erstellen, das als schlecht angesehen wird?
- 8. Verwenden Sie formlos, um Daten aus Fallklassen zu extrahieren, zu ändern und die Fallklasse neu zu erstellen
- 9. Warum braucht mein Eclipse so oft, um Dateien zu bereinigen?
- 10. Muss ich ein neues Objekt erstellen, um eine Scala-Eigenschaft zu mischen?
- 11. Kann ein nicht neues Objekt gelöscht werden?
- 12. Warum ist mein neues Objekt() NULL?
- 13. Warum braucht Jenkins Slave Java, um slave.jar laufen zu lassen?
- 14. Erstellen Sie ein neues PropertyInfo-Objekt im laufenden Betrieb
- 15. erstellen neues Objekt aus Array javascript
- 16. Gibt es eine Möglichkeit, einem SimpleDateFormat-Objekt Sekunden hinzuzufügen, ohne ein neues Objekt zu erstellen?
- 17. Informationselemente für ein anderes Objekt neu erstellen oder ausblenden?
- 18. Warum ist 'synchronisiert (neues Objekt()) {} `ein No-Op?
- 19. Ein Bild bearbeiten, ohne ein neues zu erstellen
- 20. Java-Postfix-Inkrement-Operator (i ++) ein neues Objekt erstellen
- 21. jquery ein neues Objekt erstellen und HTML-Text einfügen
- 22. Kann ich ein neues Objekt ohne Funktionsnotation instanziieren? Warum?
- 23. Erstellen Sie ein neues PHP-Objekt in einer vorhandenen Klasse
- 24. So erzwingen Scons nicht um Ziel neu zu erstellen
- 25. Erstellen Sie ein neues List-Objekt in Python
- 26. Symfony neues Objekt erstellen viele zu einem Fehleraufruf undefined Methode
- 27. Erstellen Sie ein neues Array
- 28. neues Objekt in C++
- 29. LINQ: Wählen Sie ein Objekt, aber einige Eigenschaften ändern, ohne ein neues Objekt erstellen
- 30. Ist es möglich, ein neues Objekt mit Lambda anstelle einer anonymen Klasse zu erstellen?
danke Mann, das ist, was ich suche :) –