我正在尝试编写一个小脚本来输出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
吗?
答案 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'")