如何使io.read()返回一个字符串?

我正在尝试学习如何编程Computercraft Mining Turtles,并且想编写一个程序,提示用户输入立方体的边长尺寸,然后建立立方体。我使用io.read()让用户输入边长,并通过Y/N输入确定他是否希望立方体是实心还是空心。但是,当我检查最后一个问题的答案时,我会得到一个错误,提示我需要一个字符串而不是一个表格。 错误代码:Cube:17: bad argument: string expected, got table

以下是我的代码

--“立方体构造器”
--“Powered by UglySoft”

function get_dimensions()
  --“提示输入立方体尺寸和实心”

  print(“请输入立方体尺寸。\n”)

  io.write(“立方体边长”)
  side_length = tonumber(io.read())

  io.write(“立方体实心?(Y/N)”)
  solid = io.read()

  solid = string:lower()

  return side_length,solid
end

function build_solid(side_length)
    print(“正在建造边长为”,side_length,“的实心立方体”)
end

function build_hollow(side_length)
    print(“正在建造方边长为”,side_length,“的空心立方体”)
end

function main()
    --“程序的主体部分”
    term.clear()
    print(“欢迎使用立方体构造器”)
    print(“Powered by UglySoft \n”)

    get_dimensions()

    if solid == “y” then
        build_solid()
    else
        build_hollow()
    end

end

main()

我非常新手掌握lua语言,而且我甚至不确定在这种情况下是否应该使用io.read()。非常感谢任何帮忙和提问的机会。

点赞
用户258523
用户258523

你的问题在于 string:lower(),它会被展开为 string.lower(string),试图对 string 表进行操作。这是不可行的。

你需要使用 solid:lower() 或者 string.lower(solid)

2015-08-28 14:32:28
用户5612484
用户5612484

在 ComputerCraft 中,你通常应该使用内置函数

read()

而不是 io.read,因为 io.read 是为了读取文件而不是用户输入而设计的。

而不是 io.write,你也可以使用 write 或者 print

2017-10-26 20:59:52