GeezerVison is showing wattlescript.github.io — Differences between WattleScript Lua and Lua - WattleScript
Differences between WattleScript Lua and Lua
WattleScript’s Lua mode contains minor differences and a few additions, inherited from MoonSharp.
List of Differences
- Strings are Unicode: some caution is required if code uses strings to store binary data. On the other hand, strings used as real strings are a lot easier to use.
- Garbage Collection is different, as WattleScript makes use of the .NET GC. Notably this makes
collectgarbage() a no-op.
- Compatibility is source-only, WattleScript cannot load luac binaries.
- Slight differences in error messages.
- Function names are tracked at function declaration, not backtracked at function calls like in Lua (noticeable only when debugging)
List of Additions
- Multiple expressions can be used as indices but the value to be indexed must be a userdata, or a table resolving to userdata through the metatable (but without using metamethods). So, for example,
x[1,2,i] is parsed correctly but might raise an error if x is not a userdata.
- Metalua short anonymous functions (lambda-style) are supported. So
|x, y| x + y is shorthand for function(x,y) return x+y end.
- A non-yieldable
__iterator metamethod has been added. It’s called if the argument f of a for ... in ... loop is not actually a function.
- A default iterator is provided if the argument
f of a for ... in ... loop is a table without __iterator or __call metamethods. The provided result is value, key unlike ipairs or pairs.
\u{xxx} escapes, where x are up to 8 hexadecimal digits, are supported inside strings and will output the specified Unicode codepoint, as it does in Lua 5.3
loadsafe and loadfilesafe methods, same as load and loadfile but defaulting to the current top-of-the-stack _ENV instead of the default one, for easier sandboxing
- The
dynamic.eval and dynamic.prepare functions to handle dynamic expressions
string.unicode method, just like string.byte but returning a whole unicode codepoint
string.contains, string.startsWith and string.endsWith methods allow easier and faster performing string ops without having to rely on patterns for simple scenarios
- The
json module to support JSON<->table conversions