5

我正在关注使用 Haxe 语言的 HaxeFlixel 教程。现在我没有任何 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->完成了什么?它用作指针吗?它是指向另一个 void 变量的 void 指针吗?

  2. ?前面的InitState:Void->Void表示什么?

  3. 在 if 语句之后,activeState就像使用括号调用函数一样。但是,activeState是变量而不是函数。那么 if 语句究竟做了什么?

还有一个问题:

public var playerPos(default, null):FlxPoint;

我知道playerPosFlxPoint类的一个实例,但是defaultandnull是做什么的?

4

1 回答 1

9
  1. 类型是Void->Void- 它是一个函数类型,在这种情况下是一个不带参数并返回的函数Void

  2. ?表示一个可选参数。在这种情况下,它相当于 write new(InitState:Void->Void = null)

  3. activeState是一个变量,但它存储了一个函数——就像你猜的那样,activeState()调用它。

(default, null) indicates that playerPos is a property. With default as the read access identifier and null as the write access identifier, it is read-only outside of the class it's defined in.

于 2015-11-22T20:15:47.177 回答