Lua“尝试索引?(一个零值)

Posted

技术标签:

【中文标题】Lua“尝试索引?(一个零值)【英文标题】:Lua "Attempt to index ? (a nil value) 【发布时间】:2013-03-11 19:40:20 【问题描述】:

所以我和我的朋友正在尝试为 ComputerCraft (Minecraft Mod) 编写一个程序,它使用 Lua 作为编程语言。我以前没有做过任何 Lua,他玩过它。基本上,我们正在尝试用m.clear() 清除一行文本,但我认为它可能不知道m 是什么,即使我试图定义它。

对不起,如果问题措辞不当,代码如下:

m = peripheral.wrap("right")
m.write("Shutting down.")
m.clear()
sleep(.1)
m.setcursorpos(1,1)
print("Shutting Down..")

以及其余代码的功能(只是更多相同)我不会发布,因为程序的功能是让它每次添加一个.,如果你明白我的意思。但是,这不是重要的部分。 :)

注意事项: 我实际上不知道peripheral.wrap("right") 是什么意思,它是从另一个人的代码中摘自ComputerCraft 论坛的(他也想清除屏幕)。

【问题讨论】:

哪一行会报错? m.write("...")?如果是这样,当您调用 peripheral.wrap() 时,API 没有返回对象,您将不得不调查以了解原因。 【参考方案1】:

函数peripheral.wrap(string side)返回一个表,其中包含来自计算机指定端外设的一些函数(如果没有找到,则返回nil)。 您收到错误是因为您试图以 nil(nil = 无)访问变量。

调用以下命令会将Hello, World打印到显示器的前面:

monitor = peripheral.wrap("top")
monitor.print("Hello, World")

同样,您可以对终端执行相同操作(计算机 gui,您不必包装它):

term.print("Hello, World")

如果您只想与 gui(而不是外部显示器)进行交互,您希望使用 table term 而不是 peripheral.wrap()。

term.write("Shutting down.")
term.clear()
sleep(.1)
term.setCursorPos(1,1) --This is supposed to be setCursorPos not setcursorpos!!!
print("Shutting Down..")

【讨论】:

【参考方案2】:

这是在显示器上吗?

如果是,则显示器必须位于计算机的右侧。 m.clear()其实理解为peripheral.wrap("right").clear(),会访问右边的监视器,使用命令clear()

如果您想在计算机上清除它,只需使用term.clear()

【讨论】:

【参考方案3】:

你应该使用 term.clear() 而不是 m.clear()

【讨论】:

部分正确...如果他想在屏幕上显示,那么term. 正确【参考方案4】:

我认为第一行应该是“local m =...” 此外,peripheral.wrap("right") 意味着它可以通过在计算机右侧发送任何命令而不是尝试在计算机上运行它来使计算机右侧的调制解调器、打印机等可用。

【讨论】:

【参考方案5】:

先试试看是不是nil..

if m ~= nil then
  m.clear()
else 
 print("can't connect")
end

【讨论】:

【参考方案6】:

尝试使用term.clear() 而不是m.clear()

【讨论】:

以上是关于Lua“尝试索引?(一个零值)的主要内容,如果未能解决你的问题,请参考以下文章

怎样在lua脚本中调用另一个lua脚本中的函数呢???

lua 如何最快速度入门

lua文件怎么打开怎么使用

什么是Lua?

Lua 学习

lua里面如何require一串lua格式的字符串