我想做这样的类:
class Example
field: false --some field shared for all instances of the class
init: (using field) ->
field = true --want to change value of the static field above
但是在lua中,我得到了:
<...>
field = false,
init = function()
local field = true //Different scopes of variable field
end
<...>
在文档中,我读到使用写作有助于处理它
您可以通过从实例编辑元表来更改所述值:
class Example
field: false
init: ->
getmetatable(@).field = true
我不建议这样做,类字段可能是您想要使用的:
class Example
@field: false
init: ->
@@field = true
分配类字段时,可以在前面加上@
以创建类变量。在方法的上下文中,必须使用@@
来引用类,因为@
表示实例。以下是@
工作原理的简要概述:
class Example
-- in this scope @ is equal to the class object, Example
print @
init: =>
-- in this score @ is equal to the instance
print @
-- so to access the class object, we can use the shortcut @@ which
-- stands for @__class
pirnt @@
此外,您对using
的使用不正确。 field
不是局部变量。它是类的实例元表上的一个字段。