多重作业如何进行?

2023-12-10

From Lua 编程第 4.1 节.

在多重赋值中,Lua 首先评估所有值,然后才 执行分配。因此,我们可以使用多重赋值 交换两个值,如

x, y = y, x -- 交换x' fory'

任务实际上是如何进行的?


如何实现多重赋值取决于您使用的 Lua 实现。只要保留语义,实现就可以自由地做任何它喜欢的事情。也就是说,无论如何实现,您都应该得到相同的结果,就像您在将所有值分配给 LHS 之前将它们保存在 RHS 中一样,正如 Lua 书中所解释的那样。


如果您仍然对实际实现感到好奇,您可以做的一件事是查看为某个程序生成的字节码是什么。例如,采用以下程序

local x,y = 10, 11
x,y = y,x

并将其传递给字节码编译器(luac -l) 对于 Lua 5.2 给出

main <lop.lua:0,0> (6 instructions at 0x9b36b50)
0+ params, 3 slots, 1 upvalue, 2 locals, 2 constants, 0 functions
    1   [1] LOADK       0 -1    ; 10
    2   [1] LOADK       1 -2    ; 11
    3   [2] MOVE        2 1
    4   [2] MOVE        1 0
    5   [2] MOVE        0 2
    6   [2] RETURN      0 1

MOVE 操作码将右侧寄存器中的值分配给左侧寄存器(有关更多详细信息,请参阅 Lua 源代码中的 lopcodes.h)。显然,发生的事情是寄存器 0 和 1 被用于x and y插槽 2 被用作临时额外插槽。x and y在前两个操作码中使用常量进行初始化,在接下来的三个 3 操作码中,使用“临时”第二个槽执行交换,有点像您手动执行的操作:

tmp = y -- MOVE 2 1
y = x   -- MOVE 1 0
x = tmp -- MOVE 0 2

考虑到 Lua 在执行交换分配和静态初始化时如何使用不同的方法,如果您对不同类型的多重分配得到不同的结果,我不会感到惊讶(设置表字段可能看起来非常不同,特别是从那时起由于元方法,顺序应该很重要......)。不过,我们需要在源代码中找到 100% 确定发出字节码的部分。正如我之前提到的,所有这些都可能因 Lua 版本和实现而异,特别是如果您查看 LuaJIT 与 PUC Lua。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多重作业如何进行? 的相关文章

  • 使用“assign()”为列表项分配值

    首先了解一些背景 我写了一个中缀函数 本质上取代了这个习惯用法 x length x 1 lt y 或者简单地说x lt append x y 对于向量 这里是 lt function x y xcall lt substitute x x
  • 在 C# 中赋值后如何保留有关对象的信息?

    我一直在问我的想法可能是解决方案 https stackoverflow com questions 35254467 is it possible in c sharp to get the attributes attached to
  • Prolog - 如何从输入文件的给定列表中创建变量列表?

    我有一个输入谓词将文件作为列表读取 输入 文件名 列表 该列表的格式将是 9 字面意思就是下划线字符 在这里 不是一个通配符 问题是我如何编写谓词 pred List List2 然后转换所有 进入变量但保留9还在同一个位置吗 所以如果我输
  • SHA2 512 的改编给出了不正确的结果

    我正在尝试调整 SecureHashAlgorithm 的纯 Lua 实现here http lua users org wiki SecureHashAlgorithm对于 SHA2 512 而不是 SHA2 256 当我尝试使用改编时
  • MySQL - 使用可变路径加载数据文件

    我在设置用于将数据放入表中的变量路径时遇到问题 这就是我构建路径的方式 SET path1 CONCAT C Projekte Metrics DXL CSV EXPORT DATA YEAR NOW MONTH NOW DAY NOW B
  • C++警告:局部变量的地址

    Merged https meta stackexchange com questions 158066 what is a merged question with 局部变量的内存可以在其作用域之外访问吗 questions 644121
  • Bash 参数引号和 eval

    我编写了一个 bash 日志记录库 用我公司当前正在使用的一些复杂脚本来实现 在进行日志调用时 我一直致力于提供调用脚本的脚本文件名 BASH SOURCE 和行号 LINENO 但是 我不想依赖用户或实现脚本来将这两个变量作为参数传递 如
  • 在 IF 语句内部创建的变量是否也可以在 IF 语句外部使用?

    如果你有这样的 if 语句 您是否能够在 if 语句之外访问 c 变量 如下所示 In PHP if没有自己的范围 所以是的 如果你在里面定义了一些东西if语句或块内 那么它将可用 就像您在外部定义它一样 当然 假设块内或块内的代码if语句
  • 如何只修改记录的一个字段而不完全重写它? [复制]

    这个问题在这里已经有答案了 It s the second time I m tackling this problem And for the second time this is while working with the Stat
  • Lua 的标准(或最好支持的)大数(任意精度)库是什么?

    我正在处理大量无法四舍五入的数字 使用 Lua 的标准数学库 似乎没有方便的方法来保持精度超过某些内部限制 我还看到有几个库可以加载以处理大数字 http oss digirati com br luabignum http oss dig
  • 在 Lua 中只归档一次

    我想知道是否有一种方法可以只执行一次 lua 文件 并且后续尝试执行该 lua 文件将导致无操作 我已经考虑过做一些类似于 C header 的 if else endif 技巧的事情 我想知道是否有一个标准方法来实现这一点 James w
  • 替换javascript中字符串中的多个字符

    我得到了这段不错的代码 但我不知道为什么不起作用 出于兼容性目的 它应该获取文本输入的值并用 HTML 代码替换每个给定的国家字符 但是 当我单击按钮时 该函数返回字符串而不进行任何更改 任何想法 jsfiddle http jsfiddl
  • 通过php变量的值设置输入字段的值

    我有一个简单的 php 计算器 代码是 h1 align center This is PHP Calculator h1
  • Django 模板 - 我可以设置要在父模板中使用的变量吗?

    我有一个包含通用导航菜单的父模板 我希望能够添加class selected 到适当的菜单选项 我希望能够在子模板中设置变量 例如 set menu products and do ifequal menu products class s
  • 如何将 .attr("id") 存储在变量中

    你们以前非常有帮助 我已经在 stackoverflow 上搜索了一段时间 但找不到答案 希望这是一个简单的问题 我试图将当前悬停的 div 的 id 存储在变量中 然后 我想使用该变量来切换具有相同 id 的图像 您可以看到 我尝试将变量
  • Linux shell 标题大小写

    我正在编写一个 shell 脚本并有一个如下所示的变量 something that is hyphenated 我需要在脚本中的各个点使用它 如下所示 something that is hyphenated somethingthati
  • Tarantool 中的冲突解决(如何在发生冲突时修复主-主模式下的复制)

    在多master场景下使用Tarantool如何实现冲突解决 我正在开发一项应该具有高可用性的服务 因此决定使用 nginx 作为 tarantool 两个节点 禁用只读选项 的负载均衡器 带有备份指令 它会重试对其他节点的失败请求 但如果
  • 类变量在其定义范围内?

    这可能是一个愚蠢的问题 我正在尝试制作文本泥 我需要每个 Room 类包含其他 Room 类 以便在尝试移动到它们或从它们获取信息时可以引用 但是 我不能这样做 因为我显然无法在其定义中声明一个类 那么 我该怎么做呢 当我说我做不到时 我的
  • 挖泥机子集 (MuMIn) - 如果存在主效应,则必须包括交互作用

    我正在使用 dredge MuMIn 进行一些探索性工作 在此过程中 我想将两个变量设置为仅当它们之间存在相互作用时才允许一起出现 即它们不能仅作为主要效果一起出现 使用样本数据 我想挖掘模型 fm1 尽管它可能没有意义 如果变量 GNP
  • 来自外部文件的 PHP 变量?

    编辑 完成的解决方案 工作代码 所以 这是我的一个朋友帮我想出来的 这是我在 K2 items php 文件中使用的部分 div class fb comments div

随机推荐