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

2024-01-12

编辑:我在ubuntu上

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

> 函数名(函数参数)

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

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

TLDR我希望能够打字

> myNewFunction(functionArgs)

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

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

谢谢你的帮助!


需要注意的是LUA_INIT (or LUA_INIT_5_3,...)环境变量:

当没有选项调用时-E,解释器检查环境变量LUA_INIT_5_3 (or LUA_INIT如果版本化名称未定义),则在运行任何参数之前。如果变量内容的格式为@filename, then lua执行该文件。否则,lua执行字符串本身。
https://www.lua.org/manual/5.3/manual.html#7 https://www.lua.org/manual/5.3/manual.html#7

如果您有固定的函数列表,您可以简单地创建一个文件(例如${HOME}/.lua_init.lua,在 Windows 上也许可以尝试%APPDATA%\something or %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 that dofiles or require根据需要创建 s 文件,定义函数,...

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Lua 解释器中创建新命令 的相关文章

  • 十六进制常数 = 格式错误的数字?

    我有一个 Lua 脚本 我试图在其中使用十六进制数字 0x 如果我使用官方 Windows 二进制文件在控制台中运行此脚本 它可以正常工作 但是如果我在我的应用程序中运行它 简单的 dofile 我得到 malformed number n
  • 了解静态链接嵌入式lua环境中lua扩展dll的构建/加载

    我有一个相对复杂的 lua 环境 我试图了解以下内容如何工作 起始设置包括以下两个模块 主要应用 无lua环境 DLL 静态链接到lua lib 包括解释器 该 dll 被加载到主应用程序中 并运行 lua 控制台解释器和可从控制台访问的
  • 循环直到在表中找到 2 个特定值?

    我试图找到一种更聪明的方法来解决这个问题 这是与游戏相关的代码的摘录 它循环遍历每个背包的每个插槽 直到找到铲子和绳子 local continue local foundShovel foundRope for i 0 Container
  • Lua 中的内联条件(a == b ? "yes" : "no")?

    无论如何 Lua 中可以使用内联条件吗 Such as print blah a true blah nahblah Sure print blah a and blah or nahblah
  • 如何在aerospike中获取ttl为-1的记录集?

    我在aerospike中有很多记录 我想获取ttl为 1的记录 请提供解决方案 只是为了澄清 设置TTL 为 1 https github com aerospike aerospike client go blob master docs
  • lua_resume 的 from 参数的含义

    From Lua 5 2 参考手册 http www lua org manual 5 2 manual html lua resume int lua resume lua State L lua State from int nargs
  • 什么时候适合使用Lua这样的嵌入式脚本语言

    我玩 魔兽世界 大约有两年了 我对用来编写插件的 Lua 很好奇 由于到目前为止我读到的有关 Lua 的内容都是 快 轻 和 这太棒了 所以我想知道如何以及何时使用它 您需要在系统中嵌入像 Lua 这样的脚本语言的典型情况是什么 当您需要最
  • 如何在 Lua 中实现 OO?

    Lua 没有内置对 OO 的支持 但它允许您自己构建它 您能否分享一些实现面向对象的方法 请为每个答案写一个例子 如果您有更多示例 请发布另一个答案 我喜欢将 OOP 视为容器 对象 内的数据封装以及可以使用该数据完成的操作子集 还有很多内
  • Lua userdata:无法同时进行数组访问和方法

    我遇到了这个人的问题 Lua userdata数组访问及方法 https stackoverflow com questions 26970316 lua userdata array access and methods 其中 当我设置用
  • Lua中如何在另一个表的表成员中搜索

    我正在编写一个 lua 程序 它有一个表 该表是另一个表的成员 当我向该成员表添加新日期时 一切正常 但是 当我想在该表中搜索时 无论我给出什么键 我总是会将最后一行添加到表中 如何在该成员表中正确搜索 Stream name functi
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • 比较 Lua 中的日期

    我有一个带有日期表的变量 如下所示 table day number 15 year number 2015 month number 2 如何获取当前日期与上述日期之间的天数 非常感谢 您可以使用os time 将表转换为秒并获取当前时间
  • 关闭 Löve2D 中的抗锯齿功能

    我在用着L ve2D http love2d org用于编写一个小游戏 L ve2D 是 Lua 的开源游戏引擎 我遇到的问题是 当您在非整数位置绘制精灵时 某些抗锯齿过滤器会自动应用于精灵 love graphics draw sprit
  • 克隆一个lua状态

    最近 我在使用C 和Lua进行开发时遇到了很多困难 我的情况是 由于某种原因 我的 C 程序中可能有数千个 Lua 状态 但这些状态在初始化后应该是相同的 当然 我可以为每个状态执行 luaL loadlibs 和 lua loadfile
  • 将值存储在 lua 的 userdata 对象中

    我想做的是这样的 object foo bar print object foo 其中 对象 是用户数据 我已经用谷歌搜索了一段时间 使用关键字 newindex 和 lua rawset 但我找不到任何可以实现我想要的功能的示例 我想用
  • 编译过程

    谁能解释一下编译是如何工作的 我似乎无法弄清楚编译是如何工作的 更具体地说 这是一个例子 我正在尝试在 MSVC 6 中编写一些代码来加载 Lua 状态 我已经 设置库的附加目录并将文件包含到正确的目录中 使用 extern C 因为 Lu
  • lua-socket:unix 域套接字?

    我使用的是 lua socket 3 0rc1 3 Ubuntu Trusty 附带的 和 lua 5 1 我正在尝试监听 unix 域套接字 我能找到的唯一示例代码是this http lua users org lists lua l
  • 如何将 Lua 粘合到 C++ 代码?

    您使用 Luabind toLua 或其他库 如果使用 是哪一个 还是根本不使用 每种方法都有哪些优点和缺点 我不太同意 自己投票 将基本类型和静态 C 函数绑定到 Lua 是微不足道的 是的 但是当你开始处理表和元表时 情况就会发生变化
  • 在 Lua 中更改元表会破坏冒号运算符

    在学习Lua的过程中 我借用了一些代码here http lua users org wiki StringIndexing使用字符串索引 正是这样 getmetatable index function str i return stri
  • 如何在 Lua-C API 5.2 中创建类对象?

    我正在使用 Lua 封装 C 函数 使用 Lua 5 2 的 Lua C API include

随机推荐

  • Mule http:outbound-endpoint + multipart/form-data

    我正在尝试调用一个期望接收多部分 表单数据的休息服务 但我遇到了一些问题 经过一段时间的搜索 我了解到我必须将有效负载移动到出站附件并将有效负载设置为空
  • 假设 DayOfWeek 的数值是否安全?

    我将星期几存储在数据库中 其中星期日 1 星期一 2 等 在数据库查询中 我需要将日期转换为System DayOfWeek 根据MSDN http msdn microsoft com en us library system dayof
  • 使用 libgdx 进行触摸滚动

    我正在尝试在 libgdx 游戏中实现触摸滚动 我有一张宽图像 是房间的全景图 我希望能够滚动图像 以便用户可以看到房间周围的情况 我拥有它 这样我就可以滚动一定的距离 但是当注册新的 touchDragged 事件时 图像会移回到原始位置
  • ASP.NET MVC 资源文件的最佳实践

    以下资源文件的最佳用途是什么 属性 资源 Phil http haacked com archive 2009 12 07 localizing aspnetmvc validation aspx在 DataAnnotation 中使用此资
  • MIUM 8 红米手机后台服务被杀死如何重启

    我在用sticky service用于后台操作 即使应用程序处于运行状态 它在所有手机中也能正常工作closed通过从堆栈中滑动 然后服务重新启动 但在RedMi Note 3w当应用程序通过从堆栈滑动关闭时 service is not
  • 代理背后的 Google Drive API Java 客户端

    我正在尝试使用 Drive API 编写一个 java 客户端驱动器 API v2 https developers google com resources api libraries documentation drive v2 jav
  • 将 WPF 样式触发器绑定到自定义依赖项属性

    我在这里找到了许多类似的线程 但似乎没有一个能解决我的具体问题 我需要在某些条件下突出显示文本框的背景 我创建了一个突出显示属性 并尝试使用样式中的触发器来设置它 但它实际上并没有突出显示文本 这是我的风格 简化了
  • Javascript setTimeout 和重定向 - IE 冻结

    我的页面上有一个脚本用于处理会话超时 当会话到期时在客户端重定向用户 完整的代码有点复杂 但我已经将代码精简到导致问题的原因
  • 更改提交者作者姓名

    我需要 SOS 帮助 我向 bitbucket 提交了一个项目并以我的名字提交 但我需要更改作者姓名 和电子邮件地址 最简单的方法是什么 您可以简单地修改最后一次提交并推送 强制 git commit amend author Your n
  • Nodejs 从 http 请求块中读取 JSON 数据

    我正在使用 Jira API 来获取单票数据 我已成功向服务器设置了 http GET 请求 并且可以将数据显示到控制台 但理想情况下我需要从 JSON 格式的数据中获取某些属性 当我尝试读取属性时 我只是得到了未定义的信息 var req
  • 使用 Mercurial 维护 CMS 和网站

    我对 Mercurial 还很陌生 在阅读了一些教程后 我仍然怀疑什么是完成我打算用它做的事情的最佳方法 我的目标是维护我正在开发的 CMS 添加新功能 修复错误等 并能够轻松地将这些更新分发到我使用所述 CMS 制作的网站 我首先为 CM
  • 如何在vuepress中使用jsx?

    Config docs vuepress config js module exports chainWebpack config isServer gt config module rule js Find the rule use ba
  • 在 Azure Cosmos DB 中使用 REST 进行 CRUD 操作

    我正在尝试使用 REST 在 Azure Cosmos DB 上执行 CRUD 操作 根据链接 https learn microsoft com en us rest api documentdb create a document ht
  • MVC 输入日期时间

    如果我在 MVC 中使用 EditorFor 我的 DateTime 字段会显示未格式化的日期时间 如果我使用旧式 html 我的字段不会收到错误类 div class editor field div
  • 暂停 Elastic Beanstalk 应用程序环境?

    我想在升级数据库时关闭应用程序服务器 有没有办法在不终止 破坏环境的情况下暂停或停止应用程序服务器 我是否可以直接访问 Elastic Beanstalk 负载均衡器并暂时进行更改 而不会对 Elastic Beanstalk 配置或其管理
  • 使用 Hibernate Criteria API 性能不佳

    我有一个使用 Hibernate 与 MsSQL 2005 服务器通信的 Java 应用程序 驱动程序是net sourceforge jtds 1 2 4 一切正常 但性能不佳horrible 我怀疑索引未用于传递给它的查询 因为响应时间
  • 将列表序列化为 JSON [重复]

    这个问题在这里已经有答案了 我正在客户端和 Django 服务器之间发送信息 我想使用 JSON 来实现这一点 我正在发送简单的信息 字符串列表 我尝试使用django core serializers 但是当我这样做时 我得到了 Attr
  • 为什么 /proc/$PID/status 中的 CapEff 全为零

    我从 ping 二进制文件中删除了 setuid 位并添加了cap net raw p而是如下 chmod 755 bin ping setcap cap net raw p bin ping 然后我跑了ping在一个终端中并从另一个终端检
  • 更改 tabbaritem 的字体大小

    是否可以更改选项卡的字体大小 我推荐一个更好的方法 yourTabBarItem setTitleTextAttributes NSDictionary dictionaryWithObjectsAndKeys UIColor whiteC
  • 如何在 Lua 解释器中创建新命令

    编辑 我在ubuntu上 所以在lua解释器中你显然可以调用内置函数 例如 gt 函数名 函数参数 我想创建一个新函数 让 lua 解释器在每次输入时都能识别它 有没有一种方法可以将我的函数添加到 lua 解释器中本机识别的函数列表中 这样