AwesomeWM:在迭代客户端时出现 for iterator is not callable(一个表值)错误
2022-1-6 16:28:30
收藏:0
阅读:339
评论:2
我正在尝试在按下某些键时切换所有标题栏。为此,我想要迭代所有客户端。我尝试了多种方式,包括:
for s in screen do
for c in s.clients do
awful.titlebar.toggle(c)
end
end
和
for c in client.get() do
awful.titlebar.toggle(c)
end
每次执行这段代码时,我都会收到一个错误:for iterator 'for iterator' is not callable (a table value)
。
这对我来说毫无意义。你能解释为什么会发生这种情况以及如何解决我的问题吗?
我正在运行搭载 Lua 5.4.3 的 Awesome 4.3。
另外,如果你有一种优雅的方法可以切换标题栏并影响新的客户端,我会感激不尽。谢谢。
编辑:我想澄清一下,即使在 for 循环中没有 awful.titlebar.toggle(c)
,错误也会发生。
原文链接 https://stackoverflow.com/questions/70609017
点赞
stackoverflow用户1672598
@Piglet的回答是正确的,但这里是实际的"如何修复它":
for index, c in ipairs(client.get()) do
awful.titlebar.toggle(c)
end
这里的问题/混淆主要是历史遗留问题。有人将 screen
变成了循环迭代器,因为他们认为这是个很酷的时间节省方法。
然而,它是整个 API 中仅有的以这种方式工作的对象(并且不会有更多)。其他对象使用 module_name()
作为构造函数,而不是循环迭代器。这是无法修复的,因为这将破坏 API,因此它仍然存在。我们不能破坏我们记录的 API,因为这将在升级时破坏人们的配置。
AwesomeWM API 中的每个其他表/列表都需要使用 ipairs()
或 pairs()
进行迭代。ipairs
用于有序列表/表格,而 pairs
用于字典。
2022-01-07 10:39:56
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
你所使用的循环是通用的 for 循环。在关键词 in 后面,它们期望一个表达式列表。第一个表达式必须是一个迭代器函数。
在你的代码中缺少这个函数。而是有一个不可调用的表。
根据 Lua 参考手册:
我不知道你的变量
screen
,s.clients
以及client.get
的返回值,但是由于错误提示是关于一个表格(table)的值,你很可能只是忘了用这个表格作为参数调用pairs
函数。因为你不知道 Lua 的基础知识。请阅读手册。你如何能够不参考手册就正确地使用像通用 for 循环这样的复杂东西呢?