Lua - 一些问题

我是一个编程业余爱好者。如果我在某些方面犯了错误,请包涵。

无论如何,我正在制作一个操作系统的 alpha 阶段,我正在制作我的安装程序。两个问题。我能从 pastebin 上获得一段代码,然后让我的 Lua 脚本下载它吗?第二个问题:我把代码的 "print" 部分放在 cmd 里面,结果出现了 "非法字符"。我不知道出了什么问题。这是我的代码。

--变量
是 = true
不是 = false
--加载界面
print ("1")
sleep(0.5)
print("2")
sleep(0.5)
print("下载操作系统")
sleep(2)
print("完成!")
sleep(0.2)
print("您想打开操作系统吗?")
end 
点赞
用户1305540
用户1305540

我发现你的代码有几个问题。

首先,TrueFalse都是没有意义的变量名-如果你没有之前为它们分配过任何值,它们都等于nil。因此,你的YesNo变量也都被设为了nil。这并不是因为lua中不存在true和false-它们只是小写的:truefalse。创建YesNo变量是多余的和难以阅读的-直接使用truefalse即可。

其次,如果你使用从lua官网下载的标准版本,sleep不是一个有效的函数(尽管它在Roblox版本的Lua中是有效的,或者这是我所听说的)。像大写的TrueFalse一样,sleep默认为nil,因此调用它不起作用。根据你运行这个的环境,你需要使用os.execute("sleep " .. number_of_seconds),如果你在mac上,或者使用os.execute("timeout /t " .. number_of_seconds),如果你在PC上。你可能需要将它们封装成一个函数:

function my_sleep_mac(number_of_seconds)
    os.execute("sleep " .. number_of_seconds)
end

function my_sleep_PC(number_of_seconds)
    os.execute("timeout /t " .. number_of_seconds)
end

至于你遇到的具体错误,我认为它是由于你的程序末尾的end语句引起的。在lua中,end并不完全是你所想的东西-它并没有指定程序的末尾。Lua只需查看文件中是否还有任何文本即可确定程序的结束位置。但是,如果没有你明确指定代码的各个子块的结束位置,例如if语句,函数等,Lua则无法确定。例如,假设你编写代码

print("checking x...")
if x == 2 then
print("x is 2")
print("Isn't it awesome that x is 2?")
print("x was checked")

lua无法确定最后一个语句,输出x被检查了,是只有在x等于2时发生的还是始终发生的。因此,你需要明确说明代码的各个部分的结束位置,这就需要使用end。不过,对于文件来说,这是不必要的,而且实际上会导致错误。下面是带有endif语句:

print("checking x...")
if x == 2 then
print("x is 2")
print("isn't it awesome that x is 2?")
end
print("x was checked")

虽然lua不关心缩进,但是最好缩进这些代码块,这样你就可以一眼看出它的开始和结束位置:

print("checking x...")
if x == 2 then
    print("x is 2")
    print("isn't it awesome that x is 2?")
end
print("x was checked")

至于你的“pastebin”问题,你需要更具体地说明。

2013-04-25 05:33:29
用户1847592
用户1847592

你可以使用操作系统独立(但会占用 CPU)的方式实现 sleep

local function sleep(seconds)
  local t0 = os.clock()
  repeat
  until os.clock() - t0 >= seconds
end
2013-04-25 06:00:18