编译时评估
Pluto的解析器提供了一些强大的结构,允许您编写在运行时永远不会看到的代码。
函数调用
只要参数在编译时也是已知的,可以在编译时使用 "$" 符号在特定的标准库函数前调用它们。
local runtime = require("crypto").joaat("Hello, World!")
local compile = $crypto.joaat("Hello, World!")
assert(runtime == compile)
如果您不熟悉编译时评估,这是代码的转换过程:
local runtime = require("crypto").joaat("Hello, World!")
local compile = 847757641 -- The JOAAT hash of "Hello, World!"
assert(runtime == compile)
这在预加载的Pluto库上可用,例如:
jsonbase32base58base64crypto
以及以下函数:
tostringutostringtonumberutonumber
条件语句
如果有一些代码只想在特定构建中编译,比如调试构建,您可以使用编译时条件语句:
local DEBUG <constexpr> = true
$if DEBUG
print("Script running in debug mode")
$else
print("Script running in release mode")
$end
在这种情况下,只有两个路径中的一个会被编译;其余的不会占用任何空间。这里还使用了 constexpr 属性,比 <const> 更严格的保证,尽管如果条件在编译时未知,$if 会引发错误。