如果将方法作为funarg传递,如何判断传递函数是否为方法,并获取方法的“this”对象是什么?
class A {
public function f():Void{
trace("f");
}
}
class B {
static function withFunarg(f:Void->Void):Void{
//HERE
}
public static function main(){
var a = new A();
withFunarg(a.f);
}
}
答案 0 :(得分:4)
您不能并且无法检索this
。但在我看来,这似乎是一种试图做到这一点的反模式。如果你想要方法和容器,你可以定义一个typedef:
typedef F = {
f : Void -> Void
}
现在你有了方法和容器。
答案 1 :(得分:1)
Haxe并没有提供跨平台的方式来做到这一点,而且通常不会建议。
但如果您最终需要此功能,则可以使用某些特定于平台的方式。
例如,在js上,以下内容将起作用(至少在当前的haxe dev版本上):
static function getThis(f:Dynamic):Dynamic{
return (f.scope && f.method) ? f.scope : null;
}
如果函数是方法,则返回对象,否则返回null。调用非功能的结果未指定。
答案 2 :(得分:0)
如果你想获得一个方法的隐含的'this'参数,你必须明确它,就像这样
static function withMethodFunarg(o:{}, f:{}->Void):Void{
//HERE you have both object and function on this object
trace(o);
f(o);
}
public static function main(){
var a = new A();
withMethodFunarg(a,function(a){a.f()});
}
实际上,这很简单:函数是一个函数,没有含义,方法调用者是一个方法调用者。