scala - operadores - diagrama de secuencia loop
Casos de uso para diferentes operadores clave sbt (3)
La documentación para sbt parece faltar realmente aquí, así que me gustaría obtener una respuesta definitiva sobre esto: ¿cuál es la diferencia entre "+ =", "++ =", "<+ =", "<++ = ", y" << = "cuando se opera con teclas?
Cuando los operadores están en desuso, ¿hay alguna documentación o guía de portabilidad de lo que significan o cómo traducirlos a una sintaxis utilizada actualmente?
Puede ver un ejemplo de dicha traducción en las confirmaciones recientes (diciembre de 2016) (en scala / scala en sí) como:
- fd3610c: evitar los operadores sbt 0.12 desaprobados ,
- c6e79dd: Evita 2 operadores sbt 0.12 más en desuso
Ya verás:
- incOptions <<= (incOptions in LocalProject("root")),
+ incOptions := (incOptions in LocalProject("root")).value,
o
- packagedArtifact in (Compile, packageBin) <<= (artifact in (Compile, packageBin), bundle).identityMap,
+ packagedArtifact in (Compile, packageBin) := (((artifact in (Compile, packageBin)).value, bundle.value)),
Puede ver más sobre la desaprobación de estos operadores en sbt PR 2711 , sbt PR 2716 y sbt/notes/0.13.13/ops_deprecation.md
.
Citar la tarea v. Configurar teclas :
Se
TaskKey[T]
unaTaskKey[T]
define una tarea.El mapa de sbt que describe el proyecto puede mantenerse alrededor de un valor de cadena fijo para una configuración como el
name
, pero debe mantener alrededor de un código ejecutable para una tarea comocompile
, incluso si ese código ejecutable finalmente devuelve una cadena, debe ser volver a ejecutar cada vez.Una clave dada siempre se refiere a una tarea o una configuración simple. Es decir, "la tarea" (si se debe volver a ejecutar cada vez) es una propiedad de la clave, no del valor.
En otras palabras, las configuraciones son inmutables y se inicializan al inicio de la compilación (similar a los val
en Scala), mientras que las tareas se ejecutan cada vez que se llaman (similar a las def
en Scala).
Cotización Definiendo tareas y configuraciones :
Usando
:=
, puede asignar un valor a una configuración y un cálculo a una tarea. Para una configuración, el valor se computará una vez en el tiempo de carga del proyecto. Para una tarea, el cálculo se volverá a ejecutar cada vez que se ejecute la tarea.
Cotizando anexando a los valores anteriores: + = y ++ = :
La asignación con
:=
es la transformación más simple, pero las claves también tienen otros métodos. Si laT
en laSettingKey[T]
deSettingKey[T]
es una secuencia, es decir, el tipo de valor de la clave es una secuencia, puede agregarla a la secuencia en lugar de reemplazarla.
+=
agregará un solo elemento a la secuencia.++=
concatenará otra secuencia.
Para finalizar, solo debe preocuparse por :=
(macro de asignación), +=
(macro de anexo) y ++=
(macro de concatenación). Los restantes, es decir, <<=
, <+=
y <++=
, ya no se recomiendan para casos de uso comunes.
De hecho, todas las operaciones se pueden expresar con la macro de asignación simple :=
(parafraseando el próximo libro SBT en Acción ).
¿Estás realmente seguro de que los documentos "realmente faltan aquí" ? Yo dudo.
No puede encontrar documentación, porque como @JacekLaskowski señaló correctamente todos los operadores, con excepción de +=
, ++=
y :=
están en desuso.
Sin embargo, puede encontrar la Documentation si cambia a una versión anterior de sbt.
Sin embargo, si está atascado en una versión anterior, este es su significado (a través de la documentación):
-
+=
y++=
Documentation , donde primero agrega un solo elemento y luego agrega unaSeq
-
~=
transforma el valor , por ejemplo, desea utilizar el valor almacenado en una configuración para obtener una nueva configuración. -
<<=
depende de otra clave , por ejemplo, si llama a laorganization <<= name
, entonces el valor de laorganization
es igual al valor delname
. Puede depender de múltiples valores, por ejemplo,organization <<= (name, version) { (n, v) => /* do something with values */ }
-
<+=
y<++=
están agregando dependencias , como el apéndice , pero puede usar el valor de configuración de otra persona para calcular el nuevo valor
Dijo que, @JacekLaskowski tiene razón, y si está usando sbt 13.xo superior, no debería tener que usar esos operadores en favor de las macros.