Synopsis Annotation without a value.
Description An Rascal:Declarations/Annotation can be associated with any node value (including any Rascal:AlgebraicDataType). This error is generated when the value of an annotation is requested but has not been defined.

rascal>data Fruit = apple(int n) | orange(int n);
rascal>anno str Fruit @ quality;
rascal>piece = orange(13);
Fruit: orange(13)
rascal>piece @ quality;
|stdin:///|(0,5,<1,0>,<1,5>): NoSuchAnnotation("quality")

Use the unary postfix operator isDefined ? to check whether the quality annotation is set:
rascal>piece @ quality?;
bool: false
Use the ternary operator ifDefinedElse ? to compute an alternative value when the quality annotation is not set:
rascal>piece @ quality ? "no quality value";
str: "no quality value"
We can also catch the NoSuchAnnotation error. First import the Rascal exceptions (which are also included in Prelude) and IO:
rascal>import Exception;
rascal>import IO;
rascal>try piece @ quality; catch NoSuchAnnotation(l): println("No such annotation: <l>");
No such annotation: quality
Finally, we can just assign a value to the quality annotation:
rascal>piece @ quality = "excellent";
Fruit: orange(13)[
rascal>piece @ quality;
str: "excellent"
Is this page unclear, or have you spotted an error? Please add a comment below and help us to improve it. For all other questions and remarks, visit