Использование оператора стрелки в Haxe и другие вопросы, связанные с типом переменной
Я следую учебному пособию для HaxeFlixel, которое использует язык Haxe. Сейчас у меня нет никакого опыта работы с Haxe, но я решил смело изучить руководство, поскольку у меня есть опыт работы с Java и Haxe, поскольку язык кажется странно похожим на Java.
Пока все шло гладко. Однако я наткнулся на этот кусок кода, и у меня есть несколько вопросов:
class FSM
{
public var activeState:Void->Void;
public function new(?InitState:Void->Void):Void
{
activeState = InitState;
}
public function update():Void
{
if (activeState != null)
activeState();
}
}
Теперь я понимаю, что это класс называется FSM
и имеет переменную под названием activeState
,
Вот мои вопросы:
Какой тип
activeState
? Я бы понял, если бы было что-то вродеactiveState:Void
но что->
достичь? Это используется в качестве указателя? Это пустой указатель, указывающий на другую пустую переменную?Что это
?
передInitState:Void->Void
означает?После заявления if
activeState
вызывается как функция с использованием скобок. Тем не мение,activeState
это переменная, а не функция. Так что же делает оператор if?
Также еще один вопрос:
public var playerPos(default, null):FlxPoint;
я понимаю playerPos
является примером FlxPoint
класс, но что делает default
а также null
делать?
1 ответ
Тип является
Void->Void
- это тип функции, в данном случае функция, которая не принимает аргументов и возвращаетVoid
,?
указывает необязательный аргумент. В этом случае это эквивалентно написаниюnew(InitState:Void->Void = null)
,activeState
переменная, но она хранит функцию - как вы уже догадались,activeState()
называет это
(default, null)
указывает на то, что playerPos
это собственность. С default
в качестве идентификатора доступа для чтения и null
как идентификатор доступа для записи, он доступен только для чтения вне класса, в котором он определен.