是否删除了Lua 5.x中upvalue的%

时间:2012-09-29 15:12:18

标签: lua closures

我正在从一本书中学习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?

3 个答案:

答案 0 :(得分:8)

从Lua 5.0开始,就没有更多的东西了#34; upvalue sign"。 upvalue是声明函数的环境的本地,因此可以像任何其他局部变量一样进行访问。

在您的情况下:只使用balance代替%balance

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

一本好但略显过时的书籍是Programming in Lua的在线版本,当然还有reference manual

答案 1 :(得分:3)

一定是一本很老的书! 在Lua 5.0中删除了%作为upvalue表示法。 (2003年发布)

5.0以来,Lua有词汇范围; 也就是说,upvalues是自动的:

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

输出:

5

答案 2 :(得分:0)