Especificar cuándo y dónde se aplica una anotación
Cuando una anotación es condicional, puede requerir otras anotaciones para especificarla en el analizador. Por ejemplo, si una función tiene una variable que puede ser sincrónica o asincrónica, la función se comporta de la siguiente manera: en el caso sincrónico siempre se realiza correctamente, pero en el caso asincrónico notifica un error si no se puede realizar correctamente inmediatamente. Cuando se llama a la función de forma sincrónica, la comprobación del valor del resultado no proporciona ningún valor al analizador de código porque no habría devuelto. Sin embargo, cuando se llama a la función de forma asincrónica y no se comprueba el resultado de la función, podría producirse un error grave. En este ejemplo se muestra una situación en la que se podría usar la anotación (que se describe _When_ más adelante en este artículo) para habilitar la comprobación.
Anotaciones estructurales
Para controlar cuándo y dónde se aplican las anotaciones, use las siguientes anotaciones estructurales.
| Anotación | Descripción |
|---|---|
_At_(expr, anno-list) |
expr es una expresión que produce un valor L. Las anotaciones de anno-list se aplican al objeto denominado por expr . Para cada anotación de , se interpreta en condición previa si la anotación se interpreta en condición previa y en condición posterior si la anotación se interpreta en condición anno-listexpr posterior. |
_At_buffer_(expr, iter, elem-count, anno-list) |
expr es una expresión que produce un valor L. Las anotaciones de anno-list se aplican al objeto denominado por expr . Para cada anotación de , se interpreta en condición previa si la anotación se interpreta en condición previa y en condición posterior si la anotación se interpreta en la anno-listexpr condición posterior.iter es el nombre de una variable que tiene como ámbito la anotación (incluido anno-list ). iter tiene un tipo implícito long . Las variables con el mismo nombre en cualquier ámbito de entrada se ocultan de la evaluación.elem-count es una expresión que se evalúa como un entero. |
_Group_(anno-list) |
Todas las anotaciones de se consideran que tienen cualquier calificador que se aplique a la anotación de anno-list grupo que se aplica a cada anotación. |
_When_(expr, anno-list) |
expr es una expresión que se puede convertir en bool . Cuando es distinto de cero ( ), las anotaciones especificadas en se true consideran anno-list aplicables.De forma predeterminada, para cada anotación de , se interpreta como el uso de los valores de entrada si la anotación es una condición previa y como el uso de los valores de salida si la anotación es una anno-listexpr condición posterior. Para invalidar el valor predeterminado, puede usar el intrínseco al evaluar una condición posterior para indicar que se deben usar _Old_ valores de entrada. Nota: Se podrían habilitar anotaciones diferentes como consecuencia del uso de si un valor mutable (por ejemplo, ) está implicado porque el resultado evaluado de en la condición previa puede diferir de su resultado evaluado en la *pLength condición expr posterior. |