gpt4 book ai didi

lua - 如何在 Lua 解释器中创建新命令

转载 作者:行者123 更新时间:2023-12-01 19:54:13 26 4
gpt4 key购买 nike

编辑:我在 ubuntu

所以在lua解释器中你显然可以调用内置函数,例如

> functionName(functionArgs)

我想创建一个新函数,让 lua 解释器在我每次键入时都能识别它。

有没有一种方法可以将我的函数添加到 lua 解释器中 native 识别的函数列表中,这样我就不必在我编写的文件上调用 dofile() 然后从那里运行它。

TLDR我希望能够打字

> myNewFunction(functionArgs)

随时在lua解释器中,让解释器自动知道我在说什么函数。

如果这是不可能的,至少有一种方法可以让我在任何目录中运行 dofile(myFile) 并且 lua 解释器总是能够找到包含我的函数的特定文件?

感谢您的帮助!

最佳答案

要查看的是LUA_INIT(或LUA_INIT_5_3,...)环境变量:

When called without option -E, the interpreter checks for an environment variable LUA_INIT_5_3 (or LUA_INIT if the versioned name is not defined) before running any argument. If the variable content has the format @filename, then lua executes the file. Otherwise, lua executes the string itself.
https://www.lua.org/manual/5.3/manual.html#7

如果你有固定的函数列表,你可以简单地创建一个文件(例如 ${HOME}/.lua_init.lua,在 Windows 上可以尝试 %APPDATA%\something%USERPROFILE%\something。)然后,将函数放入该文件中,并设置指向该文件的 LUA_INIT 环境变量之一,并为文件路径添加前缀与 '@'。 unixoid OSen 的小例子:

$ cd        # just to ensure that we are in ${HOME}
$ echo "function ping( ) print 'pong' end" >> .lua_init.lua
$ echo 'export LUA_INIT="@${HOME}/.lua_init.lua"' >> .profile
$ source .profile
$ lua
Lua 5.3.3 Copyright (C) 1994-2016 Lua.org, PUC-Rio
> ping()
pong

(对于 Windows,请参阅下面 Egor Skriptunoff 的评论。)

<小时/>

如果你想自动从当前目录加载东西,那就更难了。一种简单的方法是设置上述内容,然后添加例如

-- autoload '.autoload.lua' in current directory if present
if io.open( ".autoload.lua" ) then -- exists, run it
-- use pcall so we don't brick the interpreter if the
-- file contains an error but can continue anyway
local ok, err = pcall( dofile, ".autoload.lua" )
if not ok then print( "AUTOLOAD ERROR: ", err ) end
end
-- GAPING SECURITY HOLE WARNING: automatically running a file
-- with the right name in any folder could run untrusted code.
-- If you actually use this, add a whitelist of known-good
-- project directories or at the very least blacklist your
-- downloads folder, /tmp, and whatever else might end up
-- containing a file with the right name but not written by you.

进入LUA_INIT文件。然后,要自动加载项目/目录特定的函数,请创建一个 .autoload.lua,根据需要 dofilerequire 文件,定义函数,...

更高级的解决方案(不需要每个文件夹都有额外的文件)会更难实现,但您可以运行任意 Lua 代码来构建您需要的任何内容。

关于lua - 如何在 Lua 解释器中创建新命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41916510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com