¿Los métodos que terminan en _!
como delete_!
o i_is_!
tienen un significado especial? ¿Son "solo nombres"? ¿Siguen alguna convención? Incluso hay bulkDelete_!!
. (El contexto específico es Levantar si hace una diferencia.)¿Terminan los métodos con _! tiene un significado especial en Scala?
Respuesta
No estoy seguro de cuál es la convención para usar _!
y _!!
en Lift, pero aquí hay un poco de historia.
Cualquier identificador alfanumérico puede tener _y una lista de símbolos agregados y todavía se analiza como un identificador único. Por ejemplo:.
scala> class [email protected]%*!
defined class Example_$bang$at$percent$times$bang
(De hecho, puede analizar casi cualquier cosa como un identificador si se rodea con acentos abiertos - y esto es lo que haces si una clase Java utiliza una palabra reservada de Scala, por ejemplo O si quiere espacios en sus identificadores).
El compilador solo reconoce una terminación simbólica especialmente, sin embargo. Si hay un método que se parece a un getter, entonces getter_ = se interpretará como un setter. (Ya sea que en realidad uso como un regulador depende de usted;. Contará con la semántica de un organismo, de todos modos) Así
scala> class Q { def q = "Hi"; def q_=(s: String) { println(s.reverse) } }
defined class Q
scala> val q = new Q
q: Q = [email protected]
scala> q.q
res0: java.lang.String = Hi
scala> q.q = "Could use this to set something"
gnihtemos tes ot siht esu dluoC
Además, el compilador se invierte el orden de los comunicantes se envían en cualquier método que termine en :
. Esto se ve más a menudo en las listas: newElement :: existingList
es en realidad una llamada al existingList.::(newElement)
. Así, por ejemplo:
scala> object Caps { def to_:(s: String) = s.toUpperCase }
defined module Caps
scala> "Example" to_: Caps
res40: java.lang.String = EXAMPLE
ningún otro uso del _
+ símbolos es convención.
¡No hay significados especiales para el! en los nombres de Scala. En la familia de lenguajes basados en Lisp,! a menudo se usa para indicar que una función tiene efectos secundarios, y esa parece ser la convención aquí.
Extrañamente no mencionado hasta el momento (aunque no particularmente relevante para su pregunta) es unary_! que es tratado especialmente.
scala> class A { def unary_! = 5 }
defined class A
scala> !(new A)
res0: Int = 5
Tiene más que ver con unary_ luego! al final. Puede tener unary_ + por ejemplo –
- 1. métodos que terminan en Scala _ =
- 2. ¿El carácter 96 HEX tiene algún significado especial en los protocolos/formatos de Internet?
- 3. ¿Qué tiene de especial los cierres?
- 4. terminan correctamente los actores de Akka en scala
- 5. ¿Coincide ... verdadero -> foo | falso -> barra "tiene un significado especial en Ocaml?
- 6. ¿Tiene! = Significado en OCaml?
- 7. ¿Jackson JSON tiene un escape especial?
- 8. ¿Qué tiene de especial Generic.xaml?
- 9. en C++, ¿qué tiene de especial "_MOVE_H"?
- 10. Anulación de los rasgos y los métodos abstractos en Scala
- 11. ¿Cómo verifico los métodos que tiene un objeto en Python?
- 12. ¿Por qué las listas de argumentos en ciertos métodos Cocoa terminan con un nil?
- 13. sobreescribir métodos en Scala
- 14. scala - ¿Puedo sobrecargar los métodos de curry?
- 15. Uso de los métodos de scala vararg en java
- 16. Significado del signo _2 en lenguaje scala
- 17. ¿De qué sirven los métodos asociativos de derechos en Scala?
- 18. Funciones vs métodos en Scala
- 19. métodos estáticos abstractas en Scala
- 20. ¿Qué tiene de especial/dev/tty?
- 21. ¿Cómo se terminan los hilos durante un bloqueo de Linux?
- 22. Tiene Scala alguna equivalencia con Haskell indefinido?
- 23. ¿Qué tiene de especial un certificado de firma de código?
- 24. ¿Scala tiene guardias?
- 25. Mejorar métodos predefinidos en Scala
- 26. ¿Por qué algunos métodos de Java en las bibliotecas centrales terminan con números?
- 27. ¿Qué significa cuando los números terminan con U
- 28. ¿Por qué los nombres miniKanren siempre terminan con `o`?
- 29. ¿La cabecera de tipo de contenido en RabbitMQ tienen ningún significado especial?
- 30. Los hilos java se eliminan cuando terminan
Wow. Gran conferencia No sabía casi nada de esto. ¡Gracias! – aioobe
'_' se usa para separar grupos de caracteres de palabras de caracteres de símbolos. Entonces 'foo _ !! _ bar' es un identificador legal. Si no quiere seguir esta regla, o necesita usar una palabra reservada, también puede incluirla en los backticks. Esto es útil para llamar a los métodos de Java llamados 'tipo', por ejemplo. – retronym
@retronym - Buen punto sobre los palos de retroceso; Añadiré eso. Sin embargo, intente escribir 'val foo _ !! _ bar = 0' en el REPL ... –