我应该使用什么Web服务器(以及为什么)进行Lua Web开发?
如果我有这样的文件结构:
./main.lua
./mylib/mylib.lua
./mylib/mylib-utils.lua
./mylib/mylib-helpers.lua
./mylib/mylib-other-stuff.lua
Run Code Online (Sandbox Code Playgroud)
从main.lua文件mylib.lua中可以加载完整路径require('mylib.mylib').但在内部mylib.lua我还想加载其他必要的模块,我不想总是指定完整的路径(例如mylib.mylib-utils).如果我决定移动文件夹,我将有很多搜索和替换.有没有办法只使用路径的相对部分?
UPD.我正在使用Lua和Corona SDK,如果这很重要的话.
是否可以从Lua中的局部变量中读取以下内容?
local t = os.execute("echo 'test'")
print(t)
Run Code Online (Sandbox Code Playgroud)
我只是想实现这一点:无论通过什么执行ox.execute并将返回任何值,我想在Lua中使用它 - 例如echo 'test'将test在bash命令行中输出- 是否可以获得返回值(test在这种情况下)到Lua局部变量?
我无法理解这段代码......我期待类似于线程的东西,我会得到一个输出随机的"nooo"和"yaaaay"互相穿插,因为它们都是异步打印,而是我发现主线程似乎阻止第一次调用coroutine.resume(),从而防止下一个被启动,直到第一个产生.
如果这是预期的操作协同程序,它们有什么用处,我将如何实现我希望的目标?我是否必须为这些协同程序实现我自己的调度程序才能异步操作?因为这看起来很混乱,我也可以使用函数!
co1 = coroutine.create(function ()
local i = 1
while i < 200 do
print("nooo")
i = i + 1
end
coroutine.yield()
end)
co2 = coroutine.create(function ()
local i = 1
while i < 200 do
print("yaaaay")
i = i + 1
end
coroutine.yield()
end)
coroutine.resume(co1)
coroutine.resume(co2)
Run Code Online (Sandbox Code Playgroud) 在Pascal,我有write和writeln.显然,Lua print与writelnPascal 类似.我们有类似writePascal的东西吗?连续打印命令如何将其输出发送到同一行?
print("Hello")
print("World")
Run Code Online (Sandbox Code Playgroud)
输出:
Hello
world
Run Code Online (Sandbox Code Playgroud)
我想要这个:
Hello world
Run Code Online (Sandbox Code Playgroud) 我需要知道如何在lua中检索表的键集.例如,如果我有下表:
tab = {}
tab[1]='a'
tab[2]='b'
tab[5]='e'
Run Code Online (Sandbox Code Playgroud)
我想要检索一个如下所示的表:
keyset = {1,2,5}
Run Code Online (Sandbox Code Playgroud) 我目前使用以下语法编写了一些Lua代码:
if (foo == nil or foo == '') then
foo = "some default value"
end
Run Code Online (Sandbox Code Playgroud)
if条件的目标是测试foo既不是空字符串,也不是nil值.
如果测试而不是两个,这个代码可以简化为一个吗?
我试图找出相当于:
foo = []
foo << "bar"
foo << "baz"
Run Code Online (Sandbox Code Playgroud)
我不想提出递增索引.是否有捷径可寻?
我有一个布尔变量,其值我想在格式化的字符串中显示.我尝试使用string.format,但是对于语言参考中列出的任何格式选项选项,可以获得以下内容:
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> print(string.format("%c\n", true))
stdin:1: bad argument #2 to 'format' (number expected, got boolean)
stack traceback:
[C]: in function 'format'
stdin:1: in main chunk
[C]: ?
Run Code Online (Sandbox Code Playgroud)
我可以得到布尔通过增加显示tostring,
> print(string.format("%s\n", tostring(true)))
true
Run Code Online (Sandbox Code Playgroud)
但对于这个lua初学者来说,这似乎是间接的.有没有我忽略的格式化选项?或者我应该使用上述方法?别的什么?
我们有一个需要确定性的游戏,因为它是多人游戏模型的一部分.我们还使用Lua,它在sprintf内部使用(格式为%.14g).
打印数字如0.00001时会出现问题.在某些情况下,它会打印1e-05,在某些情况下,它会打印1e-005(额外为零).
例如,当使用Visual Studio 2015进行编译时,它会进行打印1e-005,并使用Visual Studio 2013进行打印1e-05.我尝试了不同的区域设置,但似乎没有任何效果.
问题是:实现确定性结果的最佳解决方案是什么? 我不关心科学记谱法是否标准化或消除.
我想到的解决方案:
%f符号时,它不会忽略无关紧要的零,因此%.14f会导致不切实际的长数.sprintf方法(从某些标准库粘贴的副本)