17.2.6 String interpolation

The syntax for string literals is extended to support string interpolation. An interpolated string literal starts with f, immediately before the first double-quote character.

Within an interpolated string literal, an arbitrary expression, when enclosed in { ... }, is expanded at run time into the result of calling 'Image on the result of evaluating the expression enclosed by the brace characters, unless it is already a string or a single character.

Here is an example of this feature where the expressions Name and X + Y will be evaluated and included in the string.

procedure Test_Interpolation is
   X    : Integer := 12;
   Y    : Integer := 15;
   Name : String := "Leo";
begin
   Put_Line (f"The name is {Name} and the sum is {X + Y}.");
end Test_Interpolation;

This will print:

The name is Leo and the sum is 27.

In addition, an escape character (\) is provided for inserting certain standard control characters (such as \t for tabulation or \n for newline) or to escape characters with special significance to the interpolated string syntax, namely ", {, },and \ itself.

escaped_charactermeaning
\aALERT
\bBACKSPACE
\fFORM FEED
\nLINE FEED
\rCARRIAGE RETURN
\tCHARACTER TABULATION
\vLINE TABULATION
\0NUL
\\\
\""
\{{
\}}

Note that, unlike normal string literals, doubled double-quote characters have no special significance. So to include a double-quote or a brace character in an interpolated string, they must be preceded by a \. Multiple interpolated strings are concatenated. For example:

Put_Line
  (f"X = {X} and Y = {Y} and X+Y = {X+Y};\n" &
   f" a double quote is \" and" &
   f" an open brace is \{");

This will print:

X = 12 and Y = 15 and X+Y = 27
a double quote is " and an open brace is {