online - ¿Qué significa la flecha principal en un nombre en clojure?
clojure web framework (2)
No tiene un significado sintáctico. Es solo parte del nombre del símbolo. En Lisp, la flecha ->
(o incluso simplemente ''>'') se usa a menudo para implicar la conversión de, o el lanzamiento de, un tipo a otro. En la macro expansión del defrecord
:
(macroexpand ''(defrecord Person [name age]))
puede ver que define ->Person
como una función que llama al constructor de Person
. ->Person
(la función) puede ser más conveniente para usted que Person.
(la llamada directa al constructor de Java) ya que puede pasarlo como un argumento para otras funciones, capturarlo en una variable y usarlo, etc.
(let [f ->Person]
(f "Bob" 65))
Compare eso con:
(let [f Person.]
(f "Bob" 65))
Que es sintácticamente inválido.
Aprendiendo Clojure Encontré un código como el siguiente:
=> (defrecord Person [name, age])
user.Person
=> (->Person "john" 40)
#user.Person{:name "john", :age 40}
=> (Person. "tom" 30)
#user.Person{:name "tom", :age 30}
la pregunta es, ¿qué significa la flecha principal (es decir, -> ) en la -> Persona ? Es un lector de macro o qué? No veo descripción de esto en la sección de lectores de clojuredoc. Además, ¿cuál es la diferencia entre -> Persona y Persona. ?
Obviamente, no en su ejemplo específico, pero en el contexto general, este operador ->
se denomina operador de subprocesamiento y se lo considera uno de los operadores de aftas. Junto con su primo, el operador ->>
, estos operadores son bastante útiles cuando necesita que el código aparezca con mayor claridad, especialmente cuando se envía la salida de funciones como parámetros a otra función. Ambos operadores son macros. Aquí hay otra publicación de SO sobre ambos operadores.
Todavía no he tenido motivo para usar el ->
, pero he necesitado ->>
para dar sentido al código que necesitaba para calcular los valores intermedios y ponerlos todos en una llamada a función.
Aquí hay otra explicación .