问题标签 [upvalue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
30119 浏览

lua - '尝试索引upvalue'是什么意思

我正在 Lua 中进行第一步编程,并在运行脚本时出现此错误:

这可能是由于我还没有掌握一些非常基本的东西,但是在谷歌搜索时我找不到任何关于它的好信息。有人可以向我解释这是什么意思吗?

0 投票
1 回答
549 浏览

lua - 什么是共享upvalues?

两个闭包如何共享一个上值?它是如何工作的?

当我print_env()从中调用foo()时打印_ENV定义的 in foo(),但是由于它们是不同的函数,它们的闭包不应该有不同的上值吗?因此,当一个函数修改其上值时,另一个保持不变。还是_ENV特殊的升值?

谢谢

0 投票
2 回答
2136 浏览

lua - 尝试索引 upvalue

今天刚开始学习Lua。我一直在 coronalabs.com 网站上做教程...我尝试将第一个练习调整为将弹跳气球轻敲到小行星游戏的场景模板中。有人能告诉我我是如何“试图索引一个upvalue”吗?

0 投票
1 回答
232 浏览

lua - 如何使用调试库与所需的 lua 文件的 upvalues 交互

如果我有一个 Lua 函数f,我可以f使用该debug.getupvalue函数查看 's 闭包中的所有上值。同样,如果我有一个文件foo.lua,我可以先查看 upvalues,foo = loadfile(foo)然后debug.getupvalue以与f. 如果我require foo.lua在那里,我可以弄清楚关闭的upvaluesfoo.lua是什么?

0 投票
0 回答
42 浏览

lua - 为什么函数l`ua_upvalueindex`的参数`n`可以是256?

嗨〜我需要一些帮助,因为我无法理解 lua 参考手册中的 c 闭包。如下:

2)

void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);
...
的最大值为n255。
...

1)

对 的任何访问lua_upvalueindex(n),其中n大于当前函数的上值数(但不大于 256,即闭包中上值的最大数的一加),都会产生可接受但无效的索引。

1) 和 2) 都是 Lua 参考手册中的描述。我很困惑:

为什么upvalues的最大数量是255时,参数可以是256 nlua_upvalueindex

有人可以帮助我吗?

0 投票
2 回答
2730 浏览

lua - 更改/更新局部变量的值(Lua upvalue)

我已经编写了一个脚本来热重新加载已经require编辑过的模块。它只是部分工作,但是......

我完成这项任务的方法非常简单。我更改了 Lua 的require函数,以便它记住与时间戳及其文件路径一起加载的模块。然后我使用一个 shell 脚本来观察这些文件的修改时间,并在它们发生变化时重新要求它们。我很简单dofile(),如果没有发生错误,我将返回值并(重新)分配给它package.loaded[<module>]。到现在为止还挺好。

当我使用全局变量时,所有这些都很完美,例如foo = require "foobar",但是当我使用局部赋值时local foo = require "foobar",我的热交换失败(部分)!

似乎包按预期换出,但是局部变量(来自上面的赋值)仍然保存旧引用或第一次调用 require 时获得的旧值。

我的想法是使用 Luadebug.getlocaldebug.setlocal函数来查找所有局部变量(堆栈中的上值)并更新它们的值/引用。

但是我得到一个错误,我想改变的upvalue是“超出范围”......有人可以帮助我吗?我应该怎么做或如何解决这个问题?

完整的代码在 Gist 结束,但是重要/相关的片段是......

  1. 第 27 行的函数local_upvalues(),它收集所有可用的上值
  1. 和第debug.setlocal()89 行,它试图更新持有废弃模块引用的上值