lua - 如何修复 "attempt to index a nil value"

标签 lua null minecraft opencomputers

我的代码有错误:它一直告诉我“尝试索引零值(全局'sides')”

我正在尝试通过 Minecraft(OpenComputers)学习 Lua,但发现自己遇到了一个零值问题。可能有些东西实际上并非来自 Lua(mod 本身),但问题涉及“纯 Lua 部分”

component = require("component")
event = require("event")
computer = require("computer")
term = require("term")

gpu = component.gpu

redstone = component.redstone

gpu.setResolution(160,50)

while true do
    term.clear()
    term.setCursor(1,1)
    gpu.setBackground(0x5A5A5A)

    gpu.set(1,1," Allumer lampe    Eteindre lampe")
    term.setCursor(1,2)

    local _,_,x,y = event.pull("touch")

    if x >= 2 and x <= 14 and y == 1 then
        redstone.setOutput(sides.left,15)
    elseif x >= 19 and x <= 32 and y == 1 then
        redstone.setOutput(sides.left,0)
    else
        main()

    end

end

我查看了 mod 的 Wiki,它说 redstone.setOutput(sides.left,15) 应该更改输出的实际值,但它也返回输出的 OLD 值(这就是我的位置)我认为我做错了)

最佳答案

在您的代码中,双方未定义。

正如你有这一行:

redstone.setOutput(sides.left,15)

您尝试使用索引运算符sides建立索引。

由于 sides 在此范围内的 nil 值中未知,因此您无法对其建立索引。这没有道理。

使用错误消息 Lua 提示您的尝试。

要避免此错误,您必须确保不会对 nil 值建立索引,方法是不对其进行索引,或者在索引时确保它不为 nil。

Sides API 是一个可以根据需要加载的模块。 有一些代码可以在表中创建该 API。

local sides = require("sides")

将执行该代码并将对新创建的 API 表的引用存储在本地变量 sides 中。

这样做之后,索引 sides 是合法的,因为 sides 不再是 nil ,而是一个表格。

sides.left 将引用存储在表 sides 中的键 "left"

的值

关于lua - 如何修复 "attempt to index a nil value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57207287/

相关文章:

lua - 采购 nvim.init 不采购所需的 Lua 文件

lua - Corona SDK 上的 Admob Interstitial 仅显示一次

java - 试图找出如何在《我的世界》1.12.2 mod 中扩大我的影响力

lua - Logitech 脚本,按住键直至松开

lua - 在 corona sdk 中设计一个无限滚动的背景

mysql - 当 Where 子句中的术语不在数据库中时,如何从 MySQL 数据库返回 0?

calloc() 和 NULL

wpf - 当由于空值而无法评估绑定(bind)时,使用默认值

java - 同一程序中不同 jar 中使用的静态类是否访问相同的数据?

java - Bukkit/龙头 : Plugin - Custom GUI Shop error