Использование оператора Arrow в 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, но что делает ->? Используется ли он как указатель? Это указатель на пустоту, указывающий на другую переменную 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 является property. С default в качестве идентификатора доступа для чтения и null в качестве идентификатора доступа к записи он доступен только для чтения вне класса, в котором он определен.

licensed under cc by-sa 3.0 with attribution.