Статические поля 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
Но в Луа я получил:
<...>
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
не является локальной переменной Это поле в мета-таблице экземпляров классов.