我想询问一些关于Haxe(AS3)中内联的问题。
- 在编译过程中,任何标记有关键字
inline
(静态和非静态)的方法总是会被内联吗? - 属性默认是否会被内联?如果不会,有没有办法将它们内联化?(可能是通过分配内联存取器方法)
- 如果内联方法在编译时消失了,那么为什么还可以从它们中派生出函数对象?
我想询问一些关于Haxe(AS3)中内联的问题。
inline
(静态和非静态)的方法总是会被内联吗?您是否看过haxe.org上的内联文档?
1.文档中有一些关于内联函数的限制。此外,您不能内联递归函数。我相信所有标记为inline
的方法都将被内联(当然,如果您的hxml文件中没有--no-inline选项),如果某个具有inline
标记的方法无法内联,则在编译期间将抛出错误。
2.不可以。您只能内联静态变量,否则会出现编译错误(内联变量必须是静态的
)。请注意,已内联的变量显然无法更改,因此没有理由内联非静态变量。如果您内联geter
或seter
:
private var v: Bool;
public inline function getv(nv: Bool) {
return v;
}
private var v: Bool;
public inline function getv(nv: Bool) {
return this.v;
}
在内联后,this
将根据类的引用进行更改。请查看示例。 StopWatched
类的任何属性都没有被内联。
public var x (getX, getY) : Int;
,其中getX()
和getY()
是内联方法。另外,functor 是一个函数对象,用于传递函数指针的一种方法,例如用于事件监听器。 - Acidic