Especificar cuándo y dónde se aplica una anotación
Cuando una anotación es condicional, puede requerir otras anotaciones para especificarlo al 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 ejecuta correctamente, pero, en el caso asincrónico, notifica un error si no se puede ejecutar correctamente de forma inmediata. Cuando se llama a la función de forma sincrónica, comprobar el valor de resultado no proporciona ningún valor al analizador de código porque no habría devuelto resultados. 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 podría usar la anotación _When_
, descrita 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.
Annotation | Descripción |
---|---|
_At_(expr, anno-list) |
expr es una expresión que produce un valor lvalue. Las anotaciones de anno-list se aplican al objeto denominado por expr . Para cada anotación de anno-list , expr 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 posterior. |
_At_buffer_(expr, iter, elem-count, anno-list) |
expr es una expresión que produce un valor lvalue. Las anotaciones de anno-list se aplican al objeto denominado por expr . Para cada anotación de anno-list , expr 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 posterior.iter es el nombre de una variable cuyo ámbito es la anotación (incluido anno-list ). iter tiene un tipo implícito long . Las variables con nombre idéntico en cualquier ámbito envolvente están ocultas de la evaluación.elem-count es una expresión que se evalúa como un entero. |
_Group_(anno-list) |
Se considera que todas las anotaciones de anno-list tienen algún calificador que se aplique a la anotación de 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 (true ), las anotaciones especificadas en anno-list se consideran aplicables.De forma predeterminada, para cada anotación de anno-list , expr se interpreta como que usa los valores de entrada si la anotación es una condición previa y como que usa los valores de salida si la anotación es una condición posterior. Para invalidar el valor predeterminado, puede usar la función intrínseca _Old_ al evaluar una condición posterior para indicar que se deben usar los valores de entrada. Nota: Es posible que se habiliten diferentes anotaciones como consecuencia de usar _When_ si un valor mutable (por ejemplo, *pLength ) está involucrado porque el resultado evaluado de expr en la condición previa puede diferir de su resultado evaluado en la condición posterior. |