En Scala, ¿cuál es el motivo por el que no necesita usar "nuevo" para crear una nueva "clase de caso"? Intenté buscar por un tiempo sin respuestas.¿Por qué "clase de caso" no necesita "nuevo" para crear un nuevo objeto
Respuesta
quiero que la cómo o por qué la ? Como dice la otra respuesta, cómo es solo el método apply
en el objeto complementario generado automáticamente.
Por qué : clases de casos a menudo se utilizan para implementar algebraic data types en Scala, y el constructor new
-menos permite código que es más elegante (la creación de un valor se parece más a la deconstrucción de que a través de la coincidencia de patrones, por ejemplo) y que se asemeja más a la sintaxis de ADT en otros idiomas.
La clase de caso tiene un objeto compañero preconstruido con apply()
implementado. Alguien incluso se queja de esto: How to override apply in a case class companion :)
Las clases de casos le proporcionan una función generada automáticamenteapply
en su objeto complementario que puede usar como un constructor.
En Scala descompilar el código de bytes se encuentra apply
función creada como la siguiente:
object Person {
def apply(name: String, age: Integer): Person = new Person(name,age)
}
Ejemplo:
case class Person(name: String, age: Integer)
El tres siguientes todos hacemos lo mismo.
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
tanto, si utiliza val p1 = Person("Frank", 23)
no es un constructor, este un método que llama a aplicar el método.
Por favor, lea scala-object-apply-functions para obtener más información.
- 1. En C++, ¿por qué se necesita `nuevo` para crear dinámicamente un objeto en lugar de asignación?
- 2. Utilizando nuevo con Scala clase último caso
- 3. Crear referencia al nuevo objeto
- 4. Necesita consejo para crear un nuevo "estándar"/"idioma"
- 5. Crear nuevo ClassLoader para recargar Clase
- 6. Php: ¿Paréntesis al crear un objeto nuevo?
- 7. ¿Crear nuevo objeto usando la reflexión?
- 8. Nuevo {objeto} vs {objeto} = nuevo {objeto}
- 9. Idiomatic Python para generar un nuevo objeto desde una clase
- 10. ¿Cada vista nueva necesita un nuevo layoutparams?
- 11. Fstream no puede crear un nuevo archivo
- 12. Crear nuevo objeto de lista en Python
- 13. Para "nuevo" o no para "nuevo"
- 14. ¿Por qué debería/no debería usar el operador "nuevo" para instanciar una clase, y por qué?
- 15. C++ Objeto sin nuevo
- 16. ¿Es posible eliminar un objeto no nuevo?
- 17. ¿Es mejor crear un nuevo objeto y devolverlo o crear el nuevo objeto en la declaración de devolución?
- 18. C# Crear nuevo T()
- 19. C# DateTime siempre crea un objeto nuevo?
- 20. CodeIgniter: ¿Crear nuevo ayudante?
- 21. Crear un nuevo objeto de ubicación en javascript
- 22. nuevo Runnable() pero no hay un nuevo hilo?
- 23. Acerca de obtener un nuevo objeto NSManagedObject
- 24. ¿por qué las propiedades no toman un nuevo valor del método de clase?
- 25. Cómo crear un nuevo usuario en AWS
- 26. ¿Necesita establecer una referencia explícita a un objeto nuevo en un bloque de uso?
- 27. ¿Por qué algunas clases no necesitan la palabra "Nuevo" al crear su instancia?
- 28. AS3 {} vs nuevo objeto
- 29. crear nuevo objeto Javascript a partir de una variable
- 30. ¿Por qué no puedo definir un nuevo tipo en ghci?
gracias, esto es lo que estoy buscando :) –