【问题标题】:Lua - Couple QuestionsLua - 几个问题
【发布时间】:2013-04-25 18:43:32
【问题描述】:

我是编码方面的业余爱好者。所以,如果我面对一些事情,请注意。

无论如何,我正在为正在制作的操作系统制作 alpha 阶段,对吗?我正在制作我的安装程序。两个问题。我可以从 pastebin 中获取代码然后让我的 lua 脚本下载吗?二。我将代码的“打印”部分放在 cmd 中。我得到“非法字符”。我不知道出了什么问题。这是我的代码。

 --Variables
Yes = True
No = False
--Loading Screen
print ("1")
sleep(0.5)
print("2")
sleep(0.5)
print("Dowloading OS")
sleep(2)
print("Done!")
sleep(0.2)
print("Would you like to open the OS?")
end

【问题讨论】:

  • 您是一个“业余”程序员,但您正在制作操作系统?慢点。如果您甚至无法理解语法正确的 Lua(而且语法不正确),那么您距离制作操作系统还有 很长的路要走
  • 它是一个阿尔法。另外,我明白这一点。我一步一步自学。

标签: lua


【解决方案1】:

我发现您的代码存在一些问题。

首先,TrueFalse 都是无意义的名称 - 除非您之前为它们分配了一些东西,否则它们都等于 nil。因此,您的YesNo 变量也都设置为nil。这并不是因为 lua 中不存在 true 和 false - 它们只是小写:truefalse。创建 YesNo 变量是多余且难以阅读的 - 只需直接使用 truefalse

其次,如果你使用的是从他们的网站下载的标准 lua,sleep 不是一个有效的函数(尽管它在 Lua 的 Roblox 版本中,或者我听说过)。像大写的TrueFalse一样,sleep默认是nil,所以调用它是行不通的。根据您正在运行的内容,如果您在 Mac 上,您将需要使用 os.execute("sleep " .. number_of_seconds),如果您在 PC 上,则需要使用 os.execute("timeout /t " .. number_of_seconds)。你可能想把这些包装成function

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语句的分支,functions等。例如,假设你写代码

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 或始终为2 时才会发生。因此,您需要明确说明代码的各个部分何时结束,为此您使用end。但是,对于文件,这是不必要的,实际上会导致错误。这是if 声明,其中引入了end

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”问题,您必须更加具体。

【讨论】:

  • 我试图让它在哪里,它将需要一个 pastebin 代码,然后将文本下载到您的 PC 上。
  • 下载什么文字?又从哪里来?下载是指从 Internet 下载(在这种情况下,您必须设置服务器),还是从文件“下载”。这个“粘贴箱”是粘贴板吗? IE 复制/粘贴文本存储在哪里?
【解决方案2】:

您可以以独立于操作系统(但 CPU 密集型)的方式实现 sleep

local function sleep(seconds)
  local t0 = os.clock()
  repeat
  until os.clock() - t0 >= seconds
end

【讨论】:

  • os.clock() - t0 >= n 应该是os.clock() - t0 >= seconds =)
  • @hjpotter92 - 谢谢。固定。
猜你喜欢
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 2015-01-03
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多