是否需要在电晕构建中设置一些特定的权限.设置以永久保存文件中的高分? 每次运行代码时,我会遇到错误 如何纠正此错误? 这是我尝试的代码: function read_score() local f1 = assert(io.open(path, "r+")) local contents = f1:read( "*a" ) highScore = tonumber(contents) if highScore==nil then highScore=0 elseif score>highScore then highScore=score end f1:write(highScore) f1:close() disp_permScore() end function disp_permScore() --Function to display the high score local f1 = assert(io.op
以下是关于 lua 的编程技术问答
对于许多Web应用程序,我需要Capistrano之类的东西来自动部署.我知道Capistrano可以用来部署非鲁比应用程序,但我不熟悉Ruby,所以我希望写作部署配置可能会有些痛苦. 所以我想知道,在任何一个perl of lua上写的Capistrano有其他选择吗? 另外,忘了提到,运行部署的平台是Windows(XP).因此,Capistrano或多或少是不可能的.尽管我发现它可以用windows带有git的mingw32 bash shell运行. 解决方案 不确定Capistrano的精确Perl"克隆". 然而,在 backpan in Exodist文件夹) Pake 和这些SSH工具: 因此,这些组合应该适合账单. ps.关于您的更新-NET :: SSH :: PERL,如果您没有在机器上安装SSH(这是纯Perl SSH实现). 其他解决方案 Perl替代方案是 rex .而且它的功能比Capistrano更多.
ps:更不用说同一任务的封闭实现的代码复杂性. 解决方案 关闭的内存开销将比Coroutine少(除非您在闭合中有很多" Upvalues"的 ,而在Coroutine中则没有).同样,调用关闭的时间开销可以忽略不计,而有一些小型开销来调用Coroutine.据我所知,Lua在Coroutine Switch中做得很好,但是如果性能很重要,并且您可以选择不使用Coroutine,则应探索该选项. 如果您想自己进行基准测试,则在lua中或其他任何事情: 您使用collectgarbage("collect");collectgarbage("count")报告所有不可填充内存的大小. (您可能想做几次"收集",而不仅仅是一个.)在创建某些东西(封闭,一个coroutine)之前和之后,要知道它消耗了多少尺寸. 您使用os.clock()时间来安排时间. 另请参见lua 其他解决方案 另请参阅: 4a -- Testing coroutine over
我试图弄清楚使用LUA从文件解析数据的最有效方法是什么.例如,假设我有一个文件(示例.txt),其中有类似的内容: 0, Data 74, Instance 4294967295, User 255, Time 如果我只想要""之前的数字,我可以想到一些获取信息的方法.我首先要使用f = io.open(example.txt)获得数据,然后使用for循环来解析f的每一行.这导致了我问题的核心.最有效的方法是什么? 在for循环中,我可以使用这些方法中的任何一种在逗号之前获取#: line.find(regex) line:gmatch(regex) line:match(regex) 或lua的拆分功能 是否有人为这些/其他方法进行了测试,他们可以指出,这是解析的快速方法?如果您可以说出小小的和大文件的速度,则奖励积分. 解决方案 您可能要使用line:match("%d+"). line:find也可以正常工作,但返回比您想要的更多.
根据我的理解,LUA是一种可嵌入的脚本语言,可以在对象上执行方法.要避免什么陷阱?在Web环境中使用LUA作为解释器并执行方法是可行的吗? 解决方案 lua非常快 - 可以将脚本预编译到bytecodes和函数接近C ++虚拟方法调用.这就是为什么在游戏行业中使用它来拼写游戏中的AI,插件和其他高级内容的原因. 但是,您将C#和Web服务器放入问题标签中. 如果您不考虑嵌入式的Web服务器,那么Lua不是很强. LUA是ANSI C-它编译为本机代码,因此,您的ASP.NET服务器也不是非常欢迎您的C#代码.想想"中等信任"或"绑定"或" 64位". 足够的陷阱.如果您已经准备好使用C#,则没有理由在Web服务器上避免使用它.它被编译和缓存.它用像这样的巨大站点进行了服务. 其他解决方案 lua脚本是有几个用于绑定LUA和C#/.网络代码在这里的工具. luainterface 是最新的. 其他解决方案 我们曾经在中型C#生物医学仪器控制应用中使
lua具有#运算符来计算用作数组的表的"长度".在诸如C之类的语言中,您计算出某物的长度后,通常不会再次计算它.例如int len = strlen(string); 这在lua中有什么不同吗?一个人效率低吗? (显然,这可能不会显示出相当小的表的明显的差异,但是知道.) 解决方案 #的值对表的#在内部未在内部存储:每次称为它. . lua使用二进制搜索,因此成本在桌子的大小上是对数.请参阅 http://www.lua.org/source/source/5.2/5.2/5.2/ltable.c. html#luah_getn .换句话说,除了巨大的桌子外,成本基本上是恒定的.
我被用来这样做: do local a for i=1,1000000 do a = --do something with a end end 而不是 for i=1,1000000 do local a = --do something with a end 我的理由是,创建本地变量1000000次的效率要比仅创建一次并在每次迭代中重复使用它的效率不那么效率. 我的问题是:这是真的还是我缺少另一个技术细节?我之所以问,是因为我看不到任何人这样做,但不确定原因是因为优势太小还是因为实际上更糟.更好的是,我的意思是使用更少的内存和更快的运行速度. 解决方案 喜欢任何性能问题,首先测量. 在UNIX系统中,您可以使用时间: time lua -e 'local a; for i=1,1
测试1:本地化 代码: local min = math.min 结果: 非本地:0.719(158%) 本地化:0.453(100%) 结论: 是的,我们应该本地化所有标准LUA和Spring API函数. 来源: https://springrts.com/wiki/wiki/lua/lua_performance 该性能提升的原因是什么? 解决方案 local min = math.min 请记住,table.name只是table["name"]的语法糖(它们完全等效).全球仅是环境表中的钥匙,因此math.min是_ENV["math"]["min"].这是两个可在实际函数值中获得的标志性查找. 将值复制到local将其放入VM寄存器中,因此没有查找.
我必须执行以下代码: local filename = dir .. "/" .. base 循环中数千次(这是打印目录树的递归). 现在,我想知道lua是否一次将3个字符串(dir,"/",")串联(即,通过将字符串分配足够长以持有总长度),还是通过执行效率的方式来实现这一点它在内部分为两个步骤: local filename = (dir .. "/") -- step1 .. base -- step2 这种最后的方式在记忆方面效率低下,因为两个字符串是分配的,而不仅仅是一个字符串. 我不太在乎CPU周期:我主要关心内存消耗. 最后,让我概括一个问题: LUA执行以下代码时仅分配一个字符串或4个字符串? local result = str1 .. str2 .. str3 .. str4 .. str5 顺便说一句,我知道我可以做:
创建诸如print(),pairs()或ipairs()? 之类的常见lua函数的本地副本有任何价值 示例: local _print = print local _pairs = pairs local _ipairs = ipairs for i, v in _ipairs(someTable) do _print(v) end 我看过一些使用此卢阿写的Lua,想知道这样做是否有任何好处(性能或其他方面)? 解决方案 主要动机可能是性能,因为访问全局变量需要哈希表查找,而访问本地变量则无法.但是,您应该衡量程序的差异.不要过度. 请注意,您不需要使用不同的名称:您可以编写local print=print等,因此您的其他程序的其余部分不需要知道这些变量是本地还是全局. 最后,当您将全局变量的值保存到本地变量中时,语义差异是一个差异:您正在进行早期绑定;如果您的程序调用了使用相同功能的外部模块,则它将使用当前值,而不是您拥有的冻结.换句话说,
我问了一个有关lua perfromance的问题,以及响应问: 您是否研究过保持LUA性能高的一般技巧?即知道创建表,而不是创建新的表,而是使用"本地打印= print",以免避免全局访问. 这与 lua模式,提示和技巧像答案特别影响了性能,并(如果可能)解释了为什么会影响性能. 每个答案一个提示是理想的. 解决方案 响应其他一些答案和评论: 的确,作为程序员,您通常应该避免过早优化. 但是.对于编译器没有太多优化或根本没有优化的脚本语言而言,这并非如此. 因此,每当您在LUA中写东西并且经常执行时,都会在时间关键的环境中运行或可以持续一段时间,这是一件好事,避免避免>(避免它们). 这是我随着时间的流逝发现的集合.我在网上发现了其中的一些,但是当internewebs 担心时,我本人对其进行了测试.另外,我已经在lua.org上阅读了lua表演论文. 一些参考: lua绩效提示 lua-users.org优化提示 避免全
我正在使用Roblox进行游戏,需要一点帮助查找具有属性值的对象.对于这里熟悉Roblox的人来说,这是一个大亨.我想知道如何使用属性Unlock_ID: 1找到所有实例,然后当您按相应的按钮时,它会解锁它,或者使其显示在屏幕上.我知道如何使对象解锁,我只是不知道如何使用该属性获取所有对象. 更简单地说: 我想在一个具有特定属性和特定值的部分内找到所有对象/实例,然后将它们放在表中. 我希望这是有道理的. 解决方案 您可以将for i,v in ipairs循环与Folder:GetChildren()一起用作迭代目录.然后,您可以将实例插入(如果它们的part:GetAttribute('Unlock_ID')等于1. local partsWithAttribute = {} local folder = workspace.Folder -- change this to whatever path you want to iterate through
在lua中,您可以以以下方式创建一个表: local t = { 1, 2, 3, 4, 5 } 但是,我想创建一个关联表,我必须按照以下方式进行操作: local t = {} t['foo'] = 1 t['bar'] = 2 以下错误: local t = { 'foo' = 1, 'bar' = 2 } 有没有一种方法可以与我的第一个代码段相似? 解决方案 编写此写的正确方法是 local t = { foo = 1, bar = 2} 或,如果您的桌子中的密钥不是法律标识符: local t = { ["one key"] = 1, ["another key"] = 2} 其他解决方案 我相信,如果您像这样看,它的效果更好,可以理解 local tablename = {["key"]="value", ["key1"]="value",
我正在尝试编码神经网 输入是8 x 8 x3的矩阵.我组织了矩阵如下: 第一个深度是针对游戏的状态,第二个深度是翻转的,最后一个深度是播放器飞机 输出为8 x 8是玩又名学习的最佳游戏(由蒙特卡洛树搜索生成) 然后,网络是8 x 8张量,可能是玩最佳游戏的可能性, 我需要获取张量的最大概率的索引(x,y). 我尝试了函数torch.max(张量,2)和torch.max(张量?1),但我没有得到我需要的东西. 有人可以帮助我吗? 非常感谢! #out = output of the neural net and output is the target output[indice][1] # need to check if the target is the same as prediction max, bestTarget = torch.max(output[index][1],2) maxP, bestPrediction = torch.max
以下是LUA代码,可以读取带有单词索引的表. 将其阅读到另一个表中,并在输出中打印它每次运行时都会随机订单. earthquakes = { date8 = "1992/01/17", date7 = "1971/02/09", date6 = "2010/04/04", date5 = "1987/10/19" } sf = string.format earthquake_num ={} for k, v in pairs(earthquakes) do table.insert(earthquake_num, {key=k,value=v}) end for i, v in pairs (earthquake_num) do print(sf(" row %d key = %s", i, v.value)) end 输出: 每次以不同的顺序 解决方案 正如Egor所说,对迭代器以任
给定表 t = {foo = "bar", bar = "foo"} 和一个变量 foo = "bar" 有什么区别 print(t.foo) 哪个打印" bar"和 print(t[foo]) 打印" foo" 解决方案 t[expr]是索引操作,其中t是要索引的表,而expr是该值用作键的表达式. t[foo]因此评估t["bar"].键bar的值是字符串foo.因此print(t[foo])打印" foo". t.name只是t["name"]的速记,其中名称与标识符的lua的词汇约定相匹配: lua中的名称(也称为标识符)可以是任何拉丁字母,阿拉伯语印度数字和下划线的字符串,不是从数字开始的,而不是保留的单词.标识符用于命名变量,表字段和标签. - 这意味着name未评估为表达式name,而是索引表时字符串字面"name".因此因此评估bar. tl; dr:到具有值或其他表达式变量的索引表,请使用t[expr].
我正在努力计算I2C收到数据的数据包错误代码(PEC),以便知道数据是否有效. 我使用了对我不起作用. 数据看起来像这样:0x00,0x07,0x01,0x12,0x3b,0xd5 pec是0xd5,基于多项式= x^8+ x^2+ x^1+ x^0-0x107 . 所以我的问题是,网站的代码与链接问题的代码之间的区别在哪里: local function crc8(t) local c = 0 for _, b in ipairs(t) do for i = 0, 7 do c = c >> 1 ~ ((c ~ b >> i) & 1) * 0xE0 end end return c end 解决方案 CRC的这个定义在所有数据字节中使用反向位. local function reverse(x) -- reverse bits of a byte local y =
我试图在Ubuntu终端安装Luasec,但它只是向我显示此错误: Error: Could not find header file for OPENSSL No file openssl/ssl.h in /usr/local/include No file openssl.h/ssl.h/ in /usr/include No file openssl/ssl.h in /include You may have to install OPENSSL in your system and/or pass OPENSSL_DIR or OPENSSL_INCDIR to the luarocks command. 当我检查OpenSSL版本时,它说其1.1.1f 那么我该如何继续? 解决方案 通过使用命令通过Luarocks安装终端的OpenSSL来解决问题: Luarocks install openssl 现在安装它后,它可以工
在Python(和我的浏览器)中,我能够将请求发送到https://www.devrant.com/api/devrant/rants?app=3&sort=algo&limit=10&skip=0并按照预期获得响应,但是有了LUA,我得到了HTTP/1.1 301 Moved Permanently.这是我到目前为止尝试过的: http = require("socket.http"); print(http.request("https://www.devrant.com/api/devrant/rants?app=3&sort=algo&limit=10&skip=0") 输出HTTP错误页面(永久移动)和 301 table: 0x8f32470 http/1.1 301 Moved Permanently 表的内容是: location https://www.devrant.com/api/devrant/rants?app=3&s