====== Literals, prefixes and suffixes ======
===== String literals =====
A string literal is delimited with the double quotation mark ''"''.
"This is a string"
Please note that in the VO dialect a string can also be delimited with the quotation mark '' ' ''.
'This is a string' // valid only in the VO dialect, not in Core or Vulcan
If you need to specify special characters or single quotation marks in a string, you need an ''escaped'' string, prefixed with ''e'':
e"This is an escaped string with a new line \nand a double \" quotation mark"
There are also interpolated strings that can contain variables:
local cValue := "guys" as string
Console.WriteLine( i"Hi {cValue}" ) // Hi guys
Since in the VO dialect a string can also be defined with single quotation marks, there is no possibility for the compiler to see a difference between a single character string and a char. Therefore you should prefix a char literal with a ''c'' like this:
cChar := c'\r'
For more details please see [[strings|Strings and their prefixes]] and [[string_char_byte|String, Char and Byte]]
===== Numeric literals =====
As default, every number with decimals is treated as ''Double'' datatype, and every number without decimals as ''Int32'' datatype. Values that are too large to fit in a Int32 are seen as Int64.
If you need to specify what type a numeric literal should take, use suffixes:
* ''d'' for **D**ouble
* ''s'' for **S**ingle
* ''m'' for Deci**m**al
* ''b'' for **B**inary
You can also use a prefix of ''0x'' to specify a hexadecimal value.
Sample code:
Console.WriteLine( "123.45 is a " + (123.45 ):GetType():Name ) // Double
Console.WriteLine( "123 is a " + ( 123 ):GetType():Name ) // Int32
Console.WriteLine( "10000000000 is a " + ( 10000000000 ):GetType():Name ) // Int64
Console.WriteLine( "123s is a " + ( 123s ):GetType():Name ) // Single
Console.WriteLine( "123d is a " + ( 123d ):GetType():Name ) // Double
Console.WriteLine( "123dm is a " + ( 123m ):GetType():Name ) // Decimal
Console.WriteLine( "0x111 has a decimal value of " + 0x111:ToString() ) // decimal 273
Console.WriteLine( "0b111 has a decimal value of " + 0b111:ToString() ) // decimal 7
For explanations why these suffixes differ from these on C#, please see this X# forum post: [[https://www.xsharp.info/forum/public-product/555-correct-syntax-for-floats|Correct syntax for floats]] (look at the 3rd message from Chris Pyrgas)