小编Sem*_*pie的帖子

按值插入/删除表

我有两张表,例如:

table1 = { element1, element2, element3, element4 }
table2 = { element1, element3 }
Run Code Online (Sandbox Code Playgroud)

表2引用了表1的一些元素,但我不知道到底是哪一个,也不知道它们的索引。现在,对于特定元素,我想检查 table2 是否包含它,并将其插入/删除。

我首先想到的是:

table.remove/insert(table2, table1.elementX)
Run Code Online (Sandbox Code Playgroud)

但是由于插入/删除是通过索引进行查找的,所以这是行不通的。当然,我可以遍历整个表,直到找到该元素并将其删除,直到迭代完成但没有匹配为止并插入它。

但是有没有更高效的方法来做到这一点?

我不想用空字段填充 table2 以将元素放在匹配的索引上。

iteration lua insert lua-table

5
推荐指数
1
解决办法
4364
查看次数

lua中的本地与全局

每个消息来源都同意这一点:

访问局部变量比访问全局变量更快

在实际使用中,主要区别在于如何处理变量,因为它仅限于范围并且无法从代码的任何点访问。

从理论上讲,局部变量可以避免非法更改,因为它无法从错误的位置访问,而且更好的是,查找 var 的性能要高得多。

现在我想知道这个概念的细节;从技术上讲,它是如何工作的,代码的某些部分可以访问,而其他部分则不能?性能提升了多少?

但主要问题是: 让我们提一下我有一个 var bazinga =“So Cool”。并想从某个地方改变它。由于字符串是公共的,我可以轻松做到这一点。但现在,如果它被声明为本地的并且我超出了范围,那么如果我通过像这样的 X 函数移交变量,那么为了获得访问权限,需要付出什么性能努力:

func_3(bazinga)
    func_N(bazinga)
end
func_2(bazinga)
   func_3(bazinga)
end

func_1()
  local bazinga = "So cool."
  func_2(bazinga) 
end
Run Code Online (Sandbox Code Playgroud)

在这一点上,局部变量的性能不断提高,为什么?

我问你,由于维护将对象移交给许多函数的代码变得一团糟,我想知道这是否真的值得。

parameters performance lua global local

4
推荐指数
1
解决办法
1万
查看次数

在 Lua 中通过引用删除变量

我在几个表中得到了几个对象。多个功能更改对象并将其移交给其他功能。

假设我的表是这样的:

objectTable = {obj1, obj2, obj3}
otherobjTable = {objA, objB, objC, objD}
Run Code Online (Sandbox Code Playgroud)

假设这些是在 main.lua 中初始化的。

现在,当跟踪 obj1 时,它被一个函数改变,该函数改变它并提供对另一个函数的引用,另一个函数又改变它。一个步骤可能如下所示:

function()
   if something then func(obj_1)
   elseif something else then func(obj_2)
   elseif something other then func(obj_3)
   //... and so on...
end

function func(received_Object)
  if something then
    table.insert(received_Object, a value)
  end
  callAnotherFunction(received_Object)
end

function callAnotherFunction(received_Object)
  if input == "Delete it" then
    local name = received_Object.name
    received_Object = nil
    return string.format("%s was deleten", name)
  else
    return false
  end
end
Run Code Online (Sandbox Code Playgroud)

现在的问题是,在received_Object = nil 之后 …

memory lua reference lua-table

3
推荐指数
1
解决办法
7824
查看次数

吨和正则表达式

给定是一个(时间 - 值)字符串,如:

local dt = "12:34:56"
Run Code Online (Sandbox Code Playgroud)

我想把这个字符串剪成

hh, mm, ss = "12", "34", "56"
Run Code Online (Sandbox Code Playgroud)

因此我使用这样的正则表达式:

local hh = string.format("%02d", tonumber( dt:gsub(":..:..","") ))
local mm = string.format("%02d", tonumber( dt:gsub(":..:",""):gsub(":","") ))
local ss = string.format("%02d", tonumber( dt:gsub("..:..:","") ))
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.(时间字符串来自userinput,所以如果用户写"1"而不是"01",我将其填充为0)

但是在值从0开始的情况下,它超出了luas tonumber()的范围(我猜是签名为零),与"1"相同,tonumber()似乎不能处理低于"2"的值.)任何人都可以告诉我该如何处理这种情况?

除此之外,如果你能告诉我正则表达式中的不良练习,我会很高兴,如果有的话.

regex lua numbers lua-patterns

2
推荐指数
1
解决办法
558
查看次数

lua:本地函数调用本地字符串 - > nil

我得到了这个代码,其中"call_name"似乎保持为零.

function mdbTest(conf)
  if conf.m_string:sub(6,9) == "MBUS" then
      local print_name, call_name = "MBUS","mbus"
  else
      local print_name, call_name = "MDB","mdb"
  end

  local port_handler = rawio.open(string.format("/dev/%s",call_name))
end
Run Code Online (Sandbox Code Playgroud)

最后,这不是一个真正的问题,因为我可以将call_name设为public,但我想知道为什么会这样.有人可以解释一下吗?

谢谢.

null string.format lua local

1
推荐指数
1
解决办法
136
查看次数