Dynamic Values
A Dynamic
value can be any type, as long as it implements Clone
.
Under the sync
feature, all types must also be Send + Sync
.
let x = 42; // value is an integer
x = 123.456; // value is now a floating-point number
x = "hello"; // value is now a string
x = x.len > 0; // value is now a boolean
x = [x]; // value is now an array
x = #{x: x}; // value is now an object map
Use type_of()
to Get Value Type
Because type_of()
a Dynamic
value returns the type of the actual value,
it is usually used to perform type-specific actions based on the actual value’s type.
let mystery = get_some_dynamic_value();
switch type_of(mystery) {
"()" => print("Hey, I got the unit () here!"),
"i64" => print("Hey, I got an integer here!"),
"f64" => print("Hey, I got a float here!"),
"decimal" => print("Hey, I got a decimal here!"),
"range" => print("Hey, I got an exclusive range here!"),
"range=" => print("Hey, I got an inclusive range here!"),
"string" => print("Hey, I got a string here!"),
"bool" => print("Hey, I got a boolean here!"),
"array" => print("Hey, I got an array here!"),
"blob" => print("Hey, I got a BLOB here!"),
"map" => print("Hey, I got an object map here!"),
"Fn" => print("Hey, I got a function pointer here!"),
"timestamp" => print("Hey, I got a time-stamp here!"),
"TestStruct" => print("Hey, I got the TestStruct custom type here!"),
_ => print(`I don't know what this is: ${type_of(mystery)}`)
}
Parse from JSON
parse_json
is defined in the LanguageCorePackage
, which is excluded when using a raw Engine
.
It also requires the metadata
feature; the no_index
and no_object
features must not be set.
Use parse_json
to parse a JSON string into a Dynamic
value.
JSON type | Rhai type |
---|---|
number (no decimal point) | INT |
number (with decimal point) | FLOAT |
string | string |
boolean | bool |
Array | array |
Object | object map |
null | () |