rhai/doc/src/language/logic.md
2020-07-26 10:07:40 +08:00

2.1 KiB

Logic Operators

{{#include ../links.md}}

Comparison Operators

Comparing most values of the same data type work out-of-the-box for all [standard types] supported by the system.

However, if using a [raw Engine] without loading any [packages], comparisons can only be made between a limited set of types (see [built-in operators]).

42 == 42;               // true

42 > 42;                // false

"hello" > "foo";        // true

"42" == 42;             // false

Comparing two values of different data types, or of unknown data types, always results in false, except for '!=' (not equals) which results in true. This is in line with intuition.

42 == 42.0;             // false - i64 cannot be compared with f64

42 != 42.0;             // true - i64 cannot be compared with f64

42 > "42";              // false - i64 cannot be compared with string

42 <= "42";             // false - i64 cannot be compared with string

let ts = new_ts();      // custom type

ts == 42;               // false - types cannot be compared

ts != 42;               // true - types cannot be compared

Boolean operators

Operator Description
! Boolean Not
&& Boolean And (short-circuits)
|| Boolean Or (short-circuits)
& Boolean And (doesn't short-circuit)
| Boolean Or (doesn't short-circuit)

Double boolean operators && and || short-circuit, meaning that the second operand will not be evaluated if the first one already proves the condition wrong.

Single boolean operators & and | always evaluate both operands.

a() || b();             // b() is not evaluated if a() is true

a() && b();             // b() is not evaluated if a() is false

a() | b();              // both a() and b() are evaluated

a() & b();              // both a() and b() are evaluated