CC Tweaked,我正在尝试制作一个采石场程序,但遇到了关于比较数字与字符串的错误,但两个值都是数字

我得到的错误信息:

query.lua:25: 比较数字和字符串

我的代码其余部分——我不知道为什么它不起作用,因为我确保两个值都是数字,但错误仍然会发生,我尝试了查找解决方法,但找不到解决方法,任何帮助将不胜感激。

print(“输入L,W,H值”)
x = read()
y = read()
z = read()

length = 5
width = 5
height = 5

length = x
width = y
height = z

volume = length * width * height
print(volume ..“块转移”)
海龟。加油()
海龟燃料= turtle.getFuelLevel()
燃油需要= turtleFuel-体积
如果需要燃料> = 0print(“检测到足够的燃料”)
否则
    print(“没有足够的燃料,错误,”..fuelNeeded ..“,需要”..volume)
end
length1 = length
while length1 > 0 do
    turtle.forward()
    length1 = length1 - 1
end
点赞
用户14091631
用户14091631

在 Computercraft 中,read() 返回一个字符串。你应该改变代码的前几行:

不要写:

x = read()
y = read()
z = read()

而应该写:

x = tonumber(read())
y = tonumber(read())
z = tonumber(read())

请注意,read() 不同于 io.read()。 一个是标准 Lua 函数(在 Computercraft 中也有实现),而 read() 是专为 CC 计算机创建的函数,可以接受一些额外的参数,一旦您变得更加高级,可以使用它来执行一些技巧。(我之所以说这个是因为在评论中有人提到了检查 io.read()

此外,您提到在编辑器中“检查了变量的类型”。 Lua 是动态类型语言,变量的类型在程序运行之前是无法知道的。您的编辑器可能是根据程序的预期来猜测变量的类型。这些猜测几乎总是不准确的。这就是为什么您需要了解您的程序在做什么,并且不能依赖您的编辑器的原因。如果您想要额外保险一些,您可以运行一些测试,或者类型的变量在程序实际执行之前根本不知道(因为它可能会变化),您可以使用 type() 来在运行时检查其类型。type() 返回一个字符串,表示变量的类型:

type(nil)                         ---> nil
type("helloworld")                ---> "string"
type(42)                          ---> "number"
type(function()print("HELLO")end) ---> "function"
type({1,2,3})                     ---> "table"
2022-12-10 16:21:34