1

我正在从一本有点旧的书中学习Lua。我试过在网上搜索,但由于#在我的搜索中使用了符号,我得到了非常令人困惑的结果。

它说要使用 upvalue,您需要使用%符号。

但是当我在我的代码中编写它时,我得到了一个错误。

Account.new = function (starting_balance)
  local self = {}
  local balance = starting_balance

  self.withdraw = function (v)
    %balance = %balance - v;
  end
  return self
end

错误是:unexpected symbol near '%'

在 Lua 5.x 中是否有一种新的方法来处理 upvalues ?

4

3 回答 3

8

自 Lua 5.0 起,不再有“升值符号”之类的东西。上值是声明函数的环境的局部变量,因此可以像任何其他局部变量一样简单地访问。

在您的情况下:只需使用balance而不是%balance.

从 Lua 5.1 开始,%用作模运算符。

一本不错但稍微过时的书是在线可用版本的《Lua 编程》,当然还有参考手册

于 2012-09-29T15:39:03.363 回答
3

应该是很老的书了!在%Lua 5.0 中删除了 as upvalue 表示法。(2003 年发布)

从 5.0 开始,Lua 有了词法作用域;也就是说,upvalues 是自动的:

do
    local balance = 0
    function deposit ( v )
        balance = balance + v
        return balance
    end
end
print ( deposit ( 5 ) )

输出:

5
于 2012-09-30T04:19:02.930 回答
0

我会选择关闭http://www.lua.org/pil/6.1.html#closures

于 2012-09-29T15:42:50.897 回答