Использование оператора стрелки в 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,

Вот мои вопросы:

  1. Какой тип activeState? Я бы понял, если бы было что-то вроде activeState:Void но что -> достичь? Это используется в качестве указателя? Это пустой указатель, указывающий на другую пустую переменную?

  2. Что это ? перед InitState:Void->Void означает?

  3. После заявления if activeState вызывается как функция с использованием скобок. Тем не мение, activeState это переменная, а не функция. Так что же делает оператор if?

Также еще один вопрос:

public var playerPos(default, null):FlxPoint;

я понимаю playerPos является примером FlxPoint класс, но что делает default а также null делать?

1 ответ

Решение
  1. Тип является Void->Void - это тип функции, в данном случае функция, которая не принимает аргументов и возвращает Void,

  2. ? указывает необязательный аргумент. В этом случае это эквивалентно написанию new(InitState:Void->Void = null),

  3. activeState переменная, но она хранит функцию - как вы уже догадались, activeState() называет это

(default, null) указывает на то, что playerPos это собственность. С default в качестве идентификатора доступа для чтения и null как идентификатор доступа для записи, он доступен только для чтения вне класса, в котором он определен.

Другие вопросы по тегам