Parece que los dos hacen lo mismo en Clojure. ¿Qué sintaxis es canónica?Escriba el valor de retorno de sugerencia con^o: meta de etiqueta?
(defn a ^int [] 4)
(defn b ^{:tag int} [] 4)
Espero que sea a
porque es más corto.
Parece que los dos hacen lo mismo en Clojure. ¿Qué sintaxis es canónica?Escriba el valor de retorno de sugerencia con^o: meta de etiqueta?
(defn a ^int [] 4)
(defn b ^{:tag int} [] 4)
Espero que sea a
porque es más corto.
Solo uso b
cuando necesito incluir metadatos que no sean solo la etiqueta. Por ejemplo, al aplicar una colección transitoria, que necesitaba
(deftype Whatever [^{:tag ITransientVector
:unsynchronized-mutable true} foo])
Nota que sería equivalente y perfectamente aceptable para escribir
(deftype Whatever [^:unsynchronized-mutable ^ITransientVector foo])
pero yo personalmente prefiero el mapa explícito.
Su 'a' es canónico. Es el único que he visto hasta ahora en el código de Clojure y en la documentación en el sitio de Clojure. Consulte here para obtener más información sobre sugerencias de tipo.
Espero que esto ayude.
Estaría muy sorprendido si hay una diferencia de velocidad. Puede * compilar un pelo más rápido, pero debería funcionar igual, y la compilación solo ocurre una vez. ¿Tiene a mano el punto de referencia que utilizó para probar esto? – amalloy
+1 Su derecha, probada de nuevo y el tiempo que tardó en variar para mí, pero se ven los dos son similares, por lo que probablemente no aumente la velocidad. Publicación editada en consecuencia. – adamjmarkham
+1. También vale la pena señalar que (a) es en realidad solo azúcar sintáctica para (b) por lo que producen los mismos resultados en tiempo de ejecución. – mikera
En realidad, la función de teclear una función en int ya no funciona. todo es largo y doble. Y hay todas las combinaciones posibles agregadas aquí: https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/IFn.java#L97 Y no es tan loco como parece. – claj
@claj Querido Dios, espero que el código se haya generado de alguna manera. De lo contrario, siento pena por la pobre savia que se quedó atrapada en ese trabajo. – Carcigenicate
Probablemente una combinación de https://github.com/clojure/math.combinatorics y https://clojuredocs.org/clojure.pprint/cl-format – claj