我的Lua中的if-then-else-end语句失败了,我该怎么修复它?

我想改进 Awesome 窗口管理器rc.lua。默认的 rc.lua 使用以下代码设置菜单:

myawesomemenu = {
   { "manual", terminal .. " -e man awesome" },
   { "edit config", editor_cmd .. " " .. awesome.conffile },
   { "restart", awesome.restart },
   { "quit", awesome.quit }
}

我使用 Awesome 作为 GNOME 桌面环境的窗口管理器,所以我想让 Awesome 使用 gnome-session-quit 程序,而不是 awesome.quit,但仅当环境变量 "DE" 设置为 "gnome" 时。因此,我用以下代码替换了第五行

{ "quit", if os.getenv("DE") == "gnome" then os.execute("/usr/bin/gnome-session-quit") else awesome.quit end }

但是当我重新加载文件时,出现 "unexpected symbol near if" 错误。如何解决这个错误,发生这种情况的原因是什么?

点赞
用户2344142
用户2344142

我相信 Lua 不是这样工作的 :P

你试过把它放在一个函数里吗?

{
    "退出",
    function()
        if os.getenv("DE") == "gnome" then
            os.execute("/usr/bin/gnome-session-quit")
        else
            awesome.quit
        end
    end
}

你能试试重新编写 awesome.quit 吗?

_awesome_quit = awesome.quit
awesome.quit = function()
    if os.getenv("DE") == "gnome" then
        os.execute("/usr/bin/gnome-session-quit")
    else
        _awesome_quit()
    end
end
2013-07-13 04:06:32
用户1009479
用户1009479

尝试这个:

{ "quit", (os.getenv("DE") == "gnome") and function() os.execute("/usr/bin/gnome-session-quit") end or awesome.quit}

a and b or c 相当于 C 表达式 a ? b : c,前提条件是 b 不是 false

2013-07-13 04:12:15