Value Types

The following primitive value types are supported natively.

Categorytype_of()to_string()
System integer"i32" or "i64""42", "123" etc.
Other integer number"i32", "u64" etc."42", "123" etc.
Integer numeric range"range", "range=""2..7", "0..=15" etc.
Floating-point number"f32" or "f64""123.4567" etc.
Fixed precision decimal number"decimal""42", "123.4567" etc.
Boolean value"bool""true" or "false"
Unicode character"char""A", "x" etc.
Immutable Unicode string"string""hello" etc.
Array"array""[ 1, 2, 3 ]" etc.
Byte array – BLOB"blob""[01020304abcd]" etc.
Object map"map""#{ "a": 1, "b": true }" etc.
Timestamp"timestamp""<timestamp>"
Function pointer"Fn""Fn(foo)" etc.
Dynamic value (i.e. can be anything)the actual typeactual value
Shared value (a reference-counted, shared dynamic value, created via automatic curryingthe actual typeactual value
Nothing/void/nil/null/Unit (or whatever it is called)"()""" (empty string)

All types are treated strictly distinct by Rhai, meaning that `i32` and `i64` and `u32` are
completely different. They cannot even be added together.

This is very similar to Rust.

[Strings](strings-chars.md) in Rhai are _immutable_, meaning that they can be shared but not modified.

Any modification done to a Rhai string causes the [string](strings-chars.md) to be cloned and
the modifications made to the copy.

The `to_string` function converts a standard type into a [string](strings-chars.md) for display purposes.

The `to_debug` function converts a standard type into a [string](strings-chars.md) in debug format.