我在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扩展中正确使用这个(和其他)标准函数?
可能系统中安装的某些扩展脚本会覆盖该函数,并且 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)
这再次依赖于动态类型。