Haxe中的箭头运算符用法以及其他与变量类型相关的问题

时间:2015-11-22 20:00:18

标签: haxe haxeflixel

我正在关注使用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语句究竟做了什么?

  4. 还有一个问题:

    public var playerPos(default, null):FlxPoint;
    

    我理解playerPosFlxPoint类的一个实例,但defaultnull做了什么?

1 个答案:

答案 0 :(得分:9)

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

  2. ?表示optional argument。在这种情况下,它相当于写new(InitState:Void->Void = null)

  3. activeState是一个变量,但它会存储一个函数 - 就像您猜到的那样,activeState()会调用它。

  4. (default, null)表示playerPosproperty。使用default作为读访问标识符并使​​用null作为写访问标识符,它在其定义的类之外是只读的。