Moonscript静态字段

时间:2016-06-05 11:40:23

标签: lua moonscript

我想这样上课:

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
<...>

在文档中,我读到写作使用有助于处理它

1 个答案:

答案 0 :(得分:1)

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

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不是局部变量。它是类的实例元表上的一个字段。