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.

上的一个字段