You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua中是否有类似JavaScript的Object.assign方法简化嵌套赋值?

解答

引用赋值写法可行性

完全可行。Lua中的table(对应JS中的对象、数组)是引用类型,和你熟悉的JS对象引用逻辑完全一致:

  • ref = grandparent.parent.member 只是将grandparent.parent.member指向的table的引用赋值给ref变量,二者指向内存中同一个table实例
  • 后续修改ref的属性等价于直接修改原嵌套结构的对应属性,没有额外性能损耗,是Lua中非常普遍的简化写法。

类似Object.assign的实现方案

Lua标准库没有内置和Object.assign完全对应的API,但你可以自己快速实现一个通用工具函数,之后就可以一行完成批量属性赋值:

实现assign函数

function assign(target, ...)
  -- 遍历所有传入的源table
  for _, source in ipairs{...} do
    -- 把源table的所有键值对写入目标table
    for k, v in pairs(source) do
      target[k] = v
    end
  end
  return target
end

使用方法

和JS的Object.assign行为完全一致,支持传入多个源table,同名属性后面的会覆盖前面的,属于浅拷贝:

assign(grandparent.parent.member, {
  prop1 = "val1",
  prop2 = val2,
  prop3 = {foo = "bar"}
})

如果不想额外定义全局函数,也可以用匿名函数实现一次性的一行赋值,可读性稍差但不需要额外声明函数:

(function(t, s) for k, v in pairs(s) do t[k] = v end end)(grandparent.parent.member, {prop1 = "val1", prop2 = val2})

内容的提问来源于stack exchange,提问作者wololoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:15:07