gpt4 book ai didi

lua - 如何在Lua中找到 `f`,使 `pcall(pcall, f)`返回 `false`?

转载 作者:行者123 更新时间:2023-12-02 10:26:09 25 4
gpt4 key购买 nike

我使用的是 Lua 5.3。

阅读《Lua 编程第 3 版》时,我进行了一项练习,要求我找到一个使 pcall(pcall, f) 返回 false 的 f 。我认为这相当于让 pcall(f) 引发错误。但似乎在任何事情上使用 pcall 都不会这样做。例如,让 f = nil 就不会发生任何不好的事情。

但是,我在互联网上发现让 f = (function() end)() 可以解决问题。但我不明白为什么。这里 f 只是函数 function() end 的返回值(即 nil),对吗?

最佳答案

这不起作用

> f = (function() end)()
> pcall(pcall, f)
true false attempt to call a nil value

但这确实:

> pcall(pcall,(function() end)())
false bad argument #1 to 'pcall' (value expected)

区别在于(function() end)()不返回任何值,这与返回nil不同。用 Lua 编写的函数无法做出这种区分,但用 C 编写的 pcall 可以做出这种区分。 (其他示例包括 printtype。)

请注意,这会按预期运行(相当于第一次尝试):

> pcall(pcall,(function() return nil end)())
true false attempt to call a nil value

关于lua - 如何在Lua中找到 `f`,使 `pcall(pcall, f)`返回 `false`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39113323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com