1

我想像这样上课:

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

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

4

1 回答 1

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

于 2016-06-05T20:57:48.893 回答