【问题标题】:How to ignore "if" arguments Lua如何忽略“if”参数Lua
【发布时间】:2022-09-24 12:12:58
【问题描述】:

我想绕过/忽略全局中 \"if\" 参数的返回。
例子。 (x y 代表杂项 arg)

全局脚本第 1 行

if x == y then
os.exit()
return
end

function HOME() 
    -- some codes
end 

HOME()

-- end script

我将使用 pcall(..

我想知道,如何忽略所有全局参数,所以当脚本直接进入 HOME() 时,如果这可能的话。另外,我将在 android 手机上执行此操作,使用具有有限 lua 功能的程序,诸如 popen、execute 之类的东西被禁用
我知道我是否写在主脚本中

pcall(\"script above\")
HOME()

我可以转到 HOME() 但前提是上面的脚本完全正确运行(编辑脚本也不是一个选项,我可以这样做

os.exit=print
pcall(

但 \"return\" 仍然退出脚本

  • 请澄清:您是否试图忽略returnos.exit 呢?这对我来说似乎是一个 X-Y 问题。只需通过设置x ~= y 或添加另一个必须使用and 满足的条件来确保if 不会触发:
  • 对不起..会尽力解释得更好。 (感谢您的回复)脚本 A = 带有 \"if\" 的脚本。我正在通过在 pcall 中使用脚本 \"B\" 来运行脚本 \"A\"。我想知道是否有办法忽略所有论点。或忽略 \"return\",因此脚本不会退出并继续 HOME()。我可以通过在 pcall 之前声明 os.exit=print 来绕过 os.exit()。所以现在脚本就可以了。如果 x==y 则 print() 返回结束。但是那个返回仍然退出脚本。有没有办法一起忽略 \"if\" 或者忽略 \"return\" 所以脚本不会退出
  • DEMONVIC:嗯,你如何传递参数?
  • \"if x==y then.. \" 只是显示脚本流程的一个示例。 \"if \"some argument ==/~=/>/< etc\" then return end... 可以告诉 lua 当它看到 \"if\" 时忽略它并转到下一行?如果不,有什么办法可以忽略我的示例中的“返回”?(我不认为有任何办法)注意 - 我无法编辑此脚本,并且由pcall. 我能做的最多的就是像 os.exit=print.. 这样的事情在做 pcall 之前
  • 你可以做if false then ... end 永远不要进入if 代码块,如果那是你想要完成的?

标签: lua arguments call


【解决方案1】:

您想为函数设置环境。

local function some_script()
    if x == y then
        print("Bye!")
        os.exit()
        return
    end

    function HOME()
        print("HOME!")
    end

    HOME()
end

-- code calling the "script"

local fn = some_script -- alt: use loadfile/load

local dummy = 1
local myenv = {}
setmetatable(myenv, {
    __index = function (self, key)
        -- check here if you want to "overwrite" the variables
        if key == "x" or key == "y" then
            dummy = dummy + 1
            return dummy
        end

        return _G[key]
    end
})

setfenv(fn, myenv)
fn() -- prints: HOME!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2011-03-11
    • 2017-10-20
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多