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

时间:2016-02-27 15:42:31

标签: lua

我正在尝试编写一个小脚本来输出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 'Unknown Title'")
    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: attempt to concatenate global 'currentArtist' (a nil value)

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

2 个答案:

答案 0 :(得分:1)

它不是os.execute,而是连接 - .. - 不能与nil一起使用。是的,您可以打印独立nil就好了。在您的情况下,currentTrack不仅nil,还currentArtist,因此您无法使用它构建字符串。考虑一下,如果您甚至需要那些您没有currentArtist值的条目并跳过它们,提供替代if分支来执行其他操作或在串联中提供一些默认值。通常的成语是(currentArtist or '') - 这里你的默认是空字符串。

答案 1 :(得分:0)

  if currentTrack == nil then
    os.execute("terminal-notifier -title '" .. currentArtist .. "' -message 'Unknown Title'")

如果执行此分支,currentTrack为nil,则连接将失败,如错误消息所述。

一起摆脱连接:

  if currentTrack == nil then
    os.execute("terminal-notifier -title -message 'Unknown Title'")