Lua:MPV 中出现“尝试连接全局”错误

我正在尝试编写一个小脚本来在 MPV 中输出文件标签。我的脚本如下:

require 'os'
require 'string'

function displayTrack()
    currentTrack = mp.get_property("metadata/by-key/Title")
    currentArtist = mp.get_property("metadata/by-key/Artist")
    currentAlbum = mp.get_property("metadata/by-key/Album")
    print(currentArtist)
    print(currentAlbum)
    print(currentTrack)

    if currentTrack == nil then
        os.execute("terminal-notifier -title '" .. currentArtist .. "' -message '未知标题'")
    else
        os.execute("terminal-notifier -title '" .. currentArtist .. "' -message '" .. currentAlbum .. " - " .. currentTrack .. "'")
    end
end

mp.observe_property("eof-reached", "bool", displayTrack)

捕获标签并打印它们适用于每个经过测试的标题。但是,如果我想取消注释以“if currentTrack == nil ...”开头的 5 行,以便它也显示本地通知,我会得到 LUA 错误:

/Users/marcel/.config/mpv/scripts/notification.lua:15: 尝试连接全局'currentArtist'(空值)

有人能告诉我为什么我可以打印字符串但不能将其转发给 os.execute 吗?

点赞
用户4546885
用户4546885

如果执行该代码分支时,currentTrack 变量值为 nil,那么连接失败,就像错误信息中所述。

可以完全摆脱连接:

  if currentTrack == nil then
    os.execute("terminal-notifier -title -message 'Unknown Title'")
2016-02-27 15:50:52
用户936986
用户936986

这不是 os.execute 函数的问题,而是字符串连接符 .. 无法与 nil 一起使用。是的,你可以打印单独的 nil。在你的情况下,不仅 currentTracknil,而且 currentArtist 也是 nil,所以你无法构建一个包含它们的字符串。考虑一下在你没有 currentArtist 值的情况下是否需要这些条目,如果不需要,则跳过它们;否则在连接字符串之前提供替代的 if 分支,进行其他操作,或在连接字符串时提供一些默认值。通常的惯用语是 (currentArtist or ''),这里你的默认值将为空字符串。

2016-02-27 16:29:54