"试图在Lua中嵌入(在VLC中)调用全局'tonumber'(零值)

sda*_*aau 5 lua vlc

我在Ubuntu 11.04上使用VLC媒体播放器1.1.9.我正在尝试尝试lua扩展VLC; 所以我添加的文件test.lua~/.local/share/vlc/lua/extensions/,它只有两行:

fps="25.000"
frame_duration=1/tonumber(fps)
Run Code Online (Sandbox Code Playgroud)

当我vlc使用详细输出进行调试时,我得到(编辑为多行分割:):

$ vlc --verbose 2
...
[0xa213874] lua generic warning: Error loading script 
 ~/.local/share/vlc/lua/extensions/test.lua: 
 .../.local/share/vlc/lua/extensions/test.lua:2:
  attempt to call global 'tonumber' (a nil value)
...
Run Code Online (Sandbox Code Playgroud)

现在,据我所知,tonumber函数是Lua5.1本身的一部分(Lua 5.1参考手册:tonumber) - 并且在我的系统上:

$ locate --regex 'lua.*so.*' | head -4
/usr/lib/libipelua.so.7.0.10
/usr/lib/liblua5.1.so
/usr/lib/liblua5.1.so.0
/usr/lib/liblua5.1.so.0.0.0
Run Code Online (Sandbox Code Playgroud)

......显然我确实安装了Lua 5.1.

那么,为什么我在tonumber这里使用会出现错误- 如何在VLC lua扩展中正确使用这个(和其他)标准函数?

mic*_*yer 1

可能系统中安装的某些扩展脚本会覆盖该函数,并且 Lua 解释器实例在所有扩展脚本之间共享,因此如果该脚本在您的脚本之前被调用,您最终将无法调用该函数。

作为一种快速解决方法,Lua 是动态类型的,您仍然可以执行以下操作:

1 / "25.000"
Run Code Online (Sandbox Code Playgroud)

并且字符串将被强制为数字。

或者,您可以定义tonumber等效项,例如:

string_to_num = function(s) return s + 0 end
Run Code Online (Sandbox Code Playgroud)

这再次依赖于动态类型。