Moonscript 静态字段

我想制作这样的类:

class Example
  field: false --某些字段共享所有类的实例
  init: (using field) ->
    field = true --想要更改上面静态字段的值

但在lua中,我得到了:

<...>
field = false,
init = function()
  local field = true //不同作用域的变量field
end
<...>

在文档中,我读到使用关键字using有助于处理它

点赞
用户127833
用户127833

你可以通过编辑实例的元表来更改你所描述的值:

class Example
  field: false
  init: ->
    getmetatable(@).field = true

我不建议那么做,类字段可能是你想要使用的:

class Example
  @field: false
  init: ->
    @@field = true

在赋值类字段时,你可以在前面加上 @ 来创建一个类变量。在一个方法的上下文中,必须使用 @@ 来引用类,因为 @ 表示实例。这里是 @ 如何工作的简要概述:

class Example
  -- 在这个作用域中,@ 等于类对象 Example
  print @

  init: =>
    -- 在这个作用域中,@ 等于实例
    print @

    -- 因此要访问类对象,我们可以使用 @@ 快捷键,它代表 @__class
    pirnt @@

另外,你使用 using 的方法是不正确的。field 不是一个局部变量,它是类实例元表上的一个字段。

2016-06-05 20:57:48