如何在Lua数组中添加一个元素?

正如标题所述。我正在使用neovim配置,而该数组的内容将被连接成一个要执行的命令:

cmd = { 'mono', omnisharp_bin, '--languageserver', '--hostPID', tostring(vim.fn.getpid()) }

像这样,但想象一下'mono'还没有被添加。

原文链接 https://stackoverflow.com/questions/71299599

点赞
stackoverflow用户573255
stackoverflow用户573255

你可以使用 table.insert

cmd = { omnisharp_bin, '--languageserver', '--hostPID', tostring(vim.fn.getpid()) }
table.insert(cmd, 1, 'mono')
-- 现在的 cmd 是你想要的

你可以使用table.insert(mytable, position, value)在位置position插入value并使其后面的所有值移动,或者使用table.insert(table, value)在数组部分的结尾插入一个值。

2022-02-28 18:47:24
stackoverflow用户11740758
stackoverflow用户11740758
假设 `cmd` 是一个对象,它可以独立处理所有问题...

cmd = setmetatable({ omnisharp_bin, '--languageserver', '--hostPID', tostring(vim.fn.getpid()) }, {__index = table}) -- 这将所有表函数添加到 cmd 中

cmd:insert(1, 'mono')

print(cmd:concat(' ',1 , #cmd)) -- 如 LMD 在评论中写道,1 和 #cmd 并不是必需的 -- 这展示了 concat() 的默认行为,可以作为启示 -- 你可以使用 concat() 挑选一系列带编号的键 -- 或者只选择一个:cmd:concat('', 1, 1) -- 特别是零以及负数

```

重要提示: cmd.insert() 意味着:使用 cmd 中的元素

( 就像 table.insert(cmd, 1, 'mono') )

cmd:insert() 意味着:使用 cmd 中的方法

( 不用 cmd 作为第一个参数 )

2022-02-28 20:13:49
stackoverflow用户5290519
stackoverflow用户5290519

为了回答这个问题(因为在看到这些回答之前我也在探究这个问题。谢谢):

cmd = { 'mono', unpack(cmd) }

我觉得这个可能会比较慢,但它很简单,所以很优雅。

2022-02-28 23:28:48