我正在关注使用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
的变量。
以下是我的问题:
activeState
的类型是什么?我会理解是否像activeState:Void
那样但->
完成了什么?它被用作指针吗?它是一个指向另一个void变量的void指针吗?
?
之前的InitState:Void->Void
表示什么?
在if语句之后,activeState
被称为使用括号的函数。但是,activeState
是变量而不是函数。那么if语句究竟做了什么?
还有一个问题:
public var playerPos(default, null):FlxPoint;
我理解playerPos
是FlxPoint
类的一个实例,但default
和null
做了什么?
答案 0 :(得分:9)
类型为Void->Void
- 它是function type,在这种情况下是一个不带参数并返回Void
的函数。
?
表示optional argument。在这种情况下,它相当于写new(InitState:Void->Void = null)
。
activeState
是一个变量,但它会存储一个函数 - 就像您猜到的那样,activeState()
会调用它。
(default, null)
表示playerPos
是property。使用default
作为读访问标识符并使用null
作为写访问标识符,它在其定义的类之外是只读的。