Moonscript 静态字段
Moonscript static fields
我想class那样:
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
<...>
在文档中我读到使用有助于处理它
您可以通过编辑实例中的元table来更改您描述的值:
class Example
field: false
init: ->
getmetatable(@).field = true
我不建议这样做,class 字段可能是您想要使用的:
class Example
@field: false
init: ->
@@field = true
分配 class 字段时,您可以使用 @
作为前缀来创建 class 变量。在方法的上下文中,必须使用 @@
来引用 class,因为 @
表示实例。以下是 @
工作原理的简要概述:
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
不是局部变量。它是 classes 的实例元 table.
上的一个字段
我想class那样:
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
<...>
在文档中我读到使用有助于处理它
您可以通过编辑实例中的元table来更改您描述的值:
class Example
field: false
init: ->
getmetatable(@).field = true
我不建议这样做,class 字段可能是您想要使用的:
class Example
@field: false
init: ->
@@field = true
分配 class 字段时,您可以使用 @
作为前缀来创建 class 变量。在方法的上下文中,必须使用 @@
来引用 class,因为 @
表示实例。以下是 @
工作原理的简要概述:
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
不是局部变量。它是 classes 的实例元 table.