2016-06-05 4 views
1

Я хочу сделать класс так: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

Вы можете изменить значение, как описано, отредактировав метатет из экземпляра:

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 не является локальной переменной. Это поле в метаданных экземпляров классов.