attrs de rule(), aspect(), repository_rule() y tag_class(). Consulta la página Reglas para obtener más información sobre cómo definir y usar atributos.
Miembros
- bool
- int
- int_list
- label
- label_keyed_string_dict
- label_list
- output
- output_list
- string
- string_dict
- string_keyed_label_dict
- string_list
- string_list_dict
bool
Attribute attr.bool(configurable=unbound, default=False, doc=None, mandatory=False)
ctx.attr correspondiente será del tipo bool.
Parámetros
| Parámetro | Descripción |
|---|---|
configurable
|
bool o sin vincular;
el valor predeterminado es unboundEste argumento solo se puede especificar para un atributo de una macro simbólica. Si Para un atributo de una regla o un aspecto, |
default
|
bool;
el valor predeterminado es FalseEs un valor predeterminado que se usará si no se proporciona ningún valor para este atributo cuando se instancia la regla. |
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|
int
Attribute attr.int(configurable=unbound, default=0, doc=None, mandatory=False, values=[])
ctx.attr correspondiente será del tipo int.
Parámetros
| Parámetro | Descripción |
|---|---|
configurable
|
bool o sin vincular;
el valor predeterminado es unboundEste argumento solo se puede especificar para un atributo de una macro simbólica. Si Para un atributo de una regla o un aspecto, |
default
|
int;
el valor predeterminado es 0Es un valor predeterminado que se usará si no se proporciona ningún valor para este atributo cuando se instancia la regla. |
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|
values
|
sequence de ints;
el valor predeterminado es []Es la lista de valores permitidos para el atributo. Se genera un error si se proporciona cualquier otro valor. |
int_list
Attribute attr.int_list(mandatory=False, allow_empty=True, *, configurable=unbound, default=[], doc=None)
Parámetros
| Parámetro | Descripción |
|---|---|
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|
allow_empty
|
bool;
el valor predeterminado es TrueEs verdadero si el atributo puede estar vacío. |
configurable
|
bool o sin vincular;
el valor predeterminado es unboundEste argumento solo se puede especificar para un atributo de una macro simbólica. Si Para un atributo de una regla o un aspecto, |
default
|
sequence de ints;
el valor predeterminado es []Es un valor predeterminado que se usa si no se proporciona ningún valor para este atributo cuando se instancia la regla. |
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
etiqueta
Attribute attr.label(configurable=unbound, default=None, materializer=None, doc=None, executable=False, allow_files=None, allow_single_file=None, mandatory=False, skip_validations=False, providers=[], for_dependency_resolution=unbound, allow_rules=None, cfg=None, aspects=[], flags=[])
Crea un esquema para un atributo de etiqueta. Este es un atributo de dependencia.
Este atributo contiene valores de Label únicos. Si se proporciona una cadena en lugar de un Label, se convertirá con el constructor de etiquetas. Las partes relativas de la ruta de la etiqueta, incluido el repositorio (que podría haber cambiado de nombre), se resuelven con respecto al paquete del destino instanciado.
En el momento del análisis (dentro de la función de implementación de la regla), cuando se recupera el valor del atributo de ctx.attr, las etiquetas se reemplazan por los Target correspondientes. Esto te permite acceder a los proveedores de las dependencias del destino actual.
Además de los archivos fuente comunes, este tipo de atributo se suele usar para hacer referencia a una herramienta, por ejemplo, un compilador. Estas herramientas se consideran dependencias, al igual que los archivos fuente. Para evitar que los usuarios deban especificar la etiqueta de la herramienta cada vez que usen la regla en sus archivos BUILD, puedes codificar de forma rígida la etiqueta de una herramienta canónica como el valor default de este atributo. Si también quieres evitar que los usuarios anulen este valor predeterminado, puedes hacer que el atributo sea privado asignándole un nombre que comience con un guion bajo. Consulta la página Reglas para obtener más información.
Parámetros
| Parámetro | Descripción |
|---|---|
configurable
|
bool o sin vincular;
el valor predeterminado es unboundEste argumento solo se puede especificar para un atributo de una macro simbólica. Si Para un atributo de una regla o un aspecto, |
default
|
Label, cadena, LateBoundDefault, NativeComputedDefault, función o None;
El valor predeterminado es NoneEs un valor predeterminado que se usará si no se proporciona ningún valor para este atributo cuando se instancia la regla.Usa una cadena o la función Label para especificar un valor predeterminado, por ejemplo, attr.label(default = "//a:b").
|
materializer
|
function;
el valor predeterminado es NoneExperimental. Este parámetro es experimental y puede cambiar en cualquier momento. No dependas de él. Se puede habilitar de forma experimental configurando --experimental_dormant_deps Si se configura, el atributo materializa las dependencias inactivas del cierre transitivo. El valor de este parámetro debe ser una función que obtenga acceso a los valores de los atributos de la regla que no son dependencias o que están marcados como disponibles para la resolución de dependencias. Debe devolver una dependencia inactiva o una lista de ellas según el tipo de atributo. |
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
executable
|
bool;
el valor predeterminado es FalseEs verdadero si la dependencia debe ser ejecutable. Esto significa que la etiqueta debe hacer referencia a un archivo ejecutable o a una regla que genere un archivo ejecutable. Accede a la etiqueta con ctx.executable.<attribute_name>.
|
allow_files
|
bool, o secuencia de cadenas, o None;
el valor predeterminado es NoneIndica si se permiten los objetivos de File. Puede ser True, False (predeterminado) o una lista de extensiones de archivo permitidas (por ejemplo, [".cc", ".cpp"]).
|
allow_single_file
|
El valor predeterminado es None. Es similar a allow_files, con la restricción de que la etiqueta debe corresponder a un solo File. Accede a ella a través de ctx.file.<attribute_name>.
|
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|
skip_validations
|
bool;
El valor predeterminado es FalseSi es verdadero, no se ejecutarán las acciones de validación de las dependencias transitivas de este atributo. Esta es una mitigación temporal y SE QUITARÁ en el futuro. |
providers
|
sequence;
el valor predeterminado es []Son los proveedores que debe proporcionar cualquier dependencia que aparezca en este atributo. El formato de este argumento es una lista de listas de proveedores: objetos |
for_dependency_resolution
|
El valor predeterminado es unbound. Si se establece este valor, el atributo estará disponible para los materializadores. Solo se permite hacer referencia a las reglas marcadas con la misma marca a través de esos atributos. |
allow_rules
|
sequence de strings o None;
El valor predeterminado es NoneQué destinos de reglas (nombres de las clases) se permiten. Esta propiedad dejó de estar disponible (se mantiene solo por compatibilidad). En su lugar, usa proveedores. |
cfg
|
El valor predeterminado es None. Configuración del atributo. Puede ser "exec", que indica que la dependencia se compila para execution platform, o "target", que indica que la dependencia se compila para target platform. Un ejemplo típico de la diferencia se da cuando se compilan apps para dispositivos móviles, en las que target platform es Android o iOS, mientras que execution platform es Linux, macOS o Windows. Este parámetro es obligatorio si executable es verdadero para evitar compilar accidentalmente herramientas de host en la configuración de destino. "target" no tiene ningún efecto semántico, por lo que no debes establecerlo cuando executable es falso, a menos que realmente ayude a aclarar tus intenciones.
|
aspects
|
sequence de Aspects;
el valor predeterminado es []Aspectos que se deben aplicar a la dependencia o las dependencias especificadas por este atributo. |
flags
|
sequence de strings;
el valor predeterminado es []Obsoleto, se quitará. |
label_keyed_string_dict
Attribute attr.label_keyed_string_dict(allow_empty=True, *, configurable=unbound, default={}, doc=None, allow_files=None, allow_rules=None, providers=[], for_dependency_resolution=unbound, flags=[], mandatory=False, cfg=None, aspects=[])
Crea un esquema para un atributo que contiene un diccionario, en el que las claves son etiquetas y los valores son cadenas. Este es un atributo de dependencia.
Este atributo contiene valores de Label únicos. Si se proporciona una cadena en lugar de un Label, se convertirá con el constructor de etiquetas. Las partes relativas de la ruta de la etiqueta, incluido el repositorio (que podría haber cambiado de nombre), se resuelven con respecto al paquete del destino instanciado.
En el momento del análisis (dentro de la función de implementación de la regla), cuando se recupera el valor del atributo de ctx.attr, las etiquetas se reemplazan por los Target correspondientes. Esto te permite acceder a los proveedores de las dependencias del destino actual.
Parámetros
| Parámetro | Descripción |
|---|---|
allow_empty
|
bool;
el valor predeterminado es TrueEs verdadero si el atributo puede estar vacío. |
configurable
|
bool o sin vincular;
el valor predeterminado es unboundEste argumento solo se puede especificar para un atributo de una macro simbólica. Si Para un atributo de una regla o un aspecto, |
default
|
dict o function; el valor predeterminado es {}Es un valor predeterminado que se usará si no se proporciona ningún valor para este atributo cuando se crea una instancia de la regla.Usa cadenas o la función Label para especificar valores predeterminados, por ejemplo, attr.label_keyed_string_dict(default = {"//a:b": "value", "//a:c": "string"}).
|
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
allow_files
|
bool, o secuencia de cadenas, o None;
el valor predeterminado es NoneIndica si se permiten los objetivos de File. Puede ser True, False (predeterminado) o una lista de extensiones de archivo permitidas (por ejemplo, [".cc", ".cpp"]).
|
allow_rules
|
sequence de strings o None;
El valor predeterminado es NoneQué destinos de reglas (nombres de las clases) se permiten. Esta propiedad dejó de estar disponible (se mantiene solo por compatibilidad). En su lugar, usa proveedores. |
providers
|
sequence;
el valor predeterminado es []Son los proveedores que debe proporcionar cualquier dependencia que aparezca en este atributo. El formato de este argumento es una lista de listas de proveedores: objetos |
for_dependency_resolution
|
El valor predeterminado es unbound. Si se establece este valor, el atributo estará disponible para los materializadores. Solo se permite hacer referencia a las reglas marcadas con la misma marca a través de esos atributos. |
flags
|
sequence de strings;
el valor predeterminado es []Obsoleto, se quitará. |
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|
cfg
|
El valor predeterminado es None. Configuración del atributo. Puede ser "exec", que indica que la dependencia se compila para execution platform, o "target", que indica que la dependencia se compila para target platform. Un ejemplo típico de la diferencia se da cuando se compilan apps para dispositivos móviles, en las que target platform es Android o iOS, mientras que execution platform es Linux, macOS o Windows.
|
aspects
|
sequence de Aspects;
el valor predeterminado es []Aspectos que se deben aplicar a la dependencia o las dependencias especificadas por este atributo. |
label_list
Attribute attr.label_list(allow_empty=True, *, configurable=unbound, default=[], materializer=None, doc=None, allow_files=None, allow_rules=None, providers=[], for_dependency_resolution=unbound, flags=[], mandatory=False, skip_validations=False, cfg=None, aspects=[])
Crea un esquema para un atributo de lista de etiquetas. Este es un atributo de dependencia. El atributo ctx.attr correspondiente será del tipo list de Targets.
Este atributo contiene valores de Label únicos. Si se proporciona una cadena en lugar de un Label, se convertirá con el constructor de etiquetas. Las partes relativas de la ruta de la etiqueta, incluido el repositorio (que podría haber cambiado de nombre), se resuelven con respecto al paquete del destino instanciado.
En el momento del análisis (dentro de la función de implementación de la regla), cuando se recupera el valor del atributo de ctx.attr, las etiquetas se reemplazan por los Target correspondientes. Esto te permite acceder a los proveedores de las dependencias del destino actual.
Parámetros
| Parámetro | Descripción |
|---|---|
allow_empty
|
bool;
el valor predeterminado es TrueEs verdadero si el atributo puede estar vacío. |
configurable
|
bool o sin vincular;
el valor predeterminado es unboundEste argumento solo se puede especificar para un atributo de una macro simbólica. Si Para un atributo de una regla o un aspecto, |
default
|
secuencia de Labels o función; el valor predeterminado es []Un valor predeterminado para usar si no se proporciona ningún valor para este atributo cuando se instancia la regla.Usa cadenas o la función Label para especificar valores predeterminados, por ejemplo, attr.label_list(default = ["//a:b", "//a:c"]).
|
materializer
|
function;
el valor predeterminado es NoneExperimental. Este parámetro es experimental y puede cambiar en cualquier momento. No dependas de él. Se puede habilitar de forma experimental configurando --experimental_dormant_deps Si se configura, el atributo materializa las dependencias inactivas del cierre transitivo. El valor de este parámetro debe ser una función que obtenga acceso a los valores de los atributos de la regla que no son dependencias o que están marcados como disponibles para la resolución de dependencias. Debe devolver una dependencia inactiva o una lista de ellas según el tipo de atributo. |
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
allow_files
|
bool, o secuencia de cadenas, o None;
el valor predeterminado es NoneIndica si se permiten los objetivos de File. Puede ser True, False (predeterminado) o una lista de extensiones de archivo permitidas (por ejemplo, [".cc", ".cpp"]).
|
allow_rules
|
sequence de strings o None;
El valor predeterminado es NoneQué destinos de reglas (nombres de las clases) se permiten. Esta propiedad dejó de estar disponible (se mantiene solo por compatibilidad). En su lugar, usa proveedores. |
providers
|
sequence;
el valor predeterminado es []Son los proveedores que debe proporcionar cualquier dependencia que aparezca en este atributo. El formato de este argumento es una lista de listas de proveedores: objetos |
for_dependency_resolution
|
El valor predeterminado es unbound. Si se establece este valor, el atributo estará disponible para los materializadores. Solo se permite hacer referencia a las reglas marcadas con la misma marca a través de esos atributos. |
flags
|
sequence de strings;
el valor predeterminado es []Obsoleto, se quitará. |
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|
skip_validations
|
bool;
El valor predeterminado es FalseSi es verdadero, no se ejecutarán las acciones de validación de las dependencias transitivas de este atributo. Esta es una mitigación temporal y SE QUITARÁ en el futuro. |
cfg
|
El valor predeterminado es None. Configuración del atributo. Puede ser "exec", que indica que la dependencia se compila para execution platform, o "target", que indica que la dependencia se compila para target platform. Un ejemplo típico de la diferencia se da cuando se compilan apps para dispositivos móviles, en las que target platform es Android o iOS, mientras que execution platform es Linux, macOS o Windows.
|
aspects
|
sequence de Aspects;
el valor predeterminado es []Aspectos que se deben aplicar a la dependencia o las dependencias especificadas por este atributo. |
output
Attribute attr.output(doc=None, mandatory=False)
Crea un esquema para un atributo de salida (etiqueta).
Este atributo contiene valores de Label únicos. Si se proporciona una cadena en lugar de un Label, se convertirá con el constructor de etiquetas. Las partes relativas de la ruta de la etiqueta, incluido el repositorio (que podría haber cambiado de nombre), se resuelven con respecto al paquete del destino instanciado.
En el momento del análisis, se puede recuperar el File correspondiente con ctx.outputs.
Parámetros
| Parámetro | Descripción |
|---|---|
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|
output_list
Attribute attr.output_list(allow_empty=True, *, doc=None, mandatory=False)
Este atributo contiene valores de Label únicos. Si se proporciona una cadena en lugar de un Label, se convertirá con el constructor de etiquetas. Las partes relativas de la ruta de la etiqueta, incluido el repositorio (que podría haber cambiado de nombre), se resuelven con respecto al paquete del destino instanciado.
En el momento del análisis, se puede recuperar el File correspondiente con ctx.outputs.
Parámetros
| Parámetro | Descripción |
|---|---|
allow_empty
|
bool;
el valor predeterminado es TrueEs verdadero si el atributo puede estar vacío. |
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|
string
Attribute attr.string(configurable=unbound, default='', doc=None, mandatory=False, values=[])
Parámetros
| Parámetro | Descripción |
|---|---|
configurable
|
bool o sin vincular;
el valor predeterminado es unboundEste argumento solo se puede especificar para un atributo de una macro simbólica. Si Para un atributo de una regla o un aspecto, |
default
|
string o NativeComputedDefault;
el valor predeterminado es ''Es un valor predeterminado que se usará si no se proporciona ningún valor para este atributo cuando se instancia la regla. |
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|
values
|
sequence de strings;
el valor predeterminado es []Es la lista de valores permitidos para el atributo. Se genera un error si se proporciona cualquier otro valor. |
string_dict
Attribute attr.string_dict(allow_empty=True, *, configurable=unbound, default={}, doc=None, mandatory=False)
Parámetros
| Parámetro | Descripción |
|---|---|
allow_empty
|
bool;
el valor predeterminado es TrueEs verdadero si el atributo puede estar vacío. |
configurable
|
bool o sin vincular;
el valor predeterminado es unboundEste argumento solo se puede especificar para un atributo de una macro simbólica. Si Para un atributo de una regla o un aspecto, |
default
|
dict:
El valor predeterminado es {}Es un valor predeterminado que se usa si no se proporciona ningún valor para este atributo cuando se crea una instancia de la regla. |
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|
string_keyed_label_dict
Attribute attr.string_keyed_label_dict(allow_empty=True, *, configurable=unbound, default={}, doc=None, allow_files=None, allow_rules=None, providers=[], for_dependency_resolution=unbound, flags=[], mandatory=False, cfg=None, aspects=[])
Crea un esquema para un atributo cuyo valor es un diccionario en el que las claves son cadenas y los valores son etiquetas. Este es un atributo de dependencia.
Este atributo contiene valores de Label únicos. Si se proporciona una cadena en lugar de un Label, se convertirá con el constructor de etiquetas. Las partes relativas de la ruta de la etiqueta, incluido el repositorio (que podría haber cambiado de nombre), se resuelven con respecto al paquete del destino instanciado.
En el momento del análisis (dentro de la función de implementación de la regla), cuando se recupera el valor del atributo de ctx.attr, las etiquetas se reemplazan por los Target correspondientes. Esto te permite acceder a los proveedores de las dependencias del destino actual.
Parámetros
| Parámetro | Descripción |
|---|---|
allow_empty
|
bool;
el valor predeterminado es TrueEs verdadero si el atributo puede estar vacío. |
configurable
|
bool o sin vincular;
el valor predeterminado es unboundEste argumento solo se puede especificar para un atributo de una macro simbólica. Si Para un atributo de una regla o un aspecto, |
default
|
dict o function; el valor predeterminado es {}Es un valor predeterminado que se usará si no se proporciona ningún valor para este atributo cuando se crea una instancia de la regla.Usa cadenas o la función Label para especificar valores predeterminados, por ejemplo, attr.string_keyed_label_dict(default = {"foo": "//a:b", "bar": "//a:c"}).
|
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
allow_files
|
bool, o secuencia de cadenas, o None;
el valor predeterminado es NoneIndica si se permiten los objetivos de File. Puede ser True, False (predeterminado) o una lista de extensiones de archivo permitidas (por ejemplo, [".cc", ".cpp"]).
|
allow_rules
|
sequence de strings o None;
El valor predeterminado es NoneQué destinos de reglas (nombres de las clases) se permiten. Esta propiedad dejó de estar disponible (se mantiene solo por compatibilidad). En su lugar, usa proveedores. |
providers
|
sequence;
el valor predeterminado es []Son los proveedores que debe proporcionar cualquier dependencia que aparezca en este atributo. El formato de este argumento es una lista de listas de proveedores: objetos |
for_dependency_resolution
|
El valor predeterminado es unbound. Si se establece este valor, el atributo estará disponible para los materializadores. Solo se permite hacer referencia a las reglas marcadas con la misma marca a través de esos atributos. |
flags
|
sequence de strings;
el valor predeterminado es []Obsoleto, se quitará. |
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|
cfg
|
El valor predeterminado es None. Configuración del atributo. Puede ser "exec", que indica que la dependencia se compila para execution platform, o "target", que indica que la dependencia se compila para target platform. Un ejemplo típico de la diferencia se da cuando se compilan apps para dispositivos móviles, en las que target platform es Android o iOS, mientras que execution platform es Linux, macOS o Windows.
|
aspects
|
sequence de Aspects;
el valor predeterminado es []Aspectos que se deben aplicar a la dependencia o las dependencias especificadas por este atributo. |
string_list
Attribute attr.string_list(mandatory=False, allow_empty=True, *, configurable=unbound, default=[], doc=None)
Parámetros
| Parámetro | Descripción |
|---|---|
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|
allow_empty
|
bool;
el valor predeterminado es TrueEs verdadero si el atributo puede estar vacío. |
configurable
|
bool o sin vincular;
el valor predeterminado es unboundEste argumento solo se puede especificar para un atributo de una macro simbólica. Si Para un atributo de una regla o un aspecto, |
default
|
sequence de strings o NativeComputedDefault;
el valor predeterminado es []Es un valor predeterminado que se usará si no se proporciona ningún valor para este atributo cuando se instancia la regla. |
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
string_list_dict
Attribute attr.string_list_dict(allow_empty=True, *, configurable=unbound, default={}, doc=None, mandatory=False)
Parámetros
| Parámetro | Descripción |
|---|---|
allow_empty
|
bool;
el valor predeterminado es TrueEs verdadero si el atributo puede estar vacío. |
configurable
|
bool o sin vincular;
el valor predeterminado es unboundEste argumento solo se puede especificar para un atributo de una macro simbólica. Si Para un atributo de una regla o un aspecto, |
default
|
dict:
El valor predeterminado es {}Es un valor predeterminado que se usa si no se proporciona ningún valor para este atributo cuando se crea una instancia de la regla. |
doc
|
cadena o None;
El valor predeterminado es NoneEs una descripción del atributo que pueden extraer las herramientas de generación de documentación. |
mandatory
|
bool;
el valor predeterminado es FalseSi es verdadero, el valor se debe especificar de forma explícita (incluso si tiene un default).
|