Macros Haxe宏,从生成的var setter调用静态方法

Macros Haxe宏,从生成的var setter调用静态方法,macros,haxe,Macros,Haxe,我正在使用haxe宏向变量添加getter和setter,现在我一直在尝试从新生成的setter中调用静态函数: 公共静态函数build():数组{ //......... //创建设置器 var setterBody=宏{ $variableRef=v; //mypackage.MyClass.myFunc(this)如果没有更完整的示例,很难知道出了什么问题。我能做的是向您展示有效的代码: TiagoLrMacroTest.hx: @:build( TiagoLrMacro.build()

我正在使用haxe宏向变量添加getter和setter,现在我一直在尝试从新生成的setter中调用静态函数:

公共静态函数build():数组{
//.........
//创建设置器
var setterBody=宏{
$variableRef=v;

//mypackage.MyClass.myFunc(this)如果没有更完整的示例,很难知道出了什么问题。我能做的是向您展示有效的代码:

TiagoLrMacroTest.hx

@:build( TiagoLrMacro.build() )
class TiagoLrMacroTest {
    public static function main() {
        var test = new TiagoLrMacroTest();
        test.name = "hello";
    }

    function new() {}

    public var name(default,set):String;
}

class MyStaticClass {
        public static function staticMethod( a:TiagoLrMacroTest ) {
        trace( a.name );
    }
}
TiagoLrMacro.hx

import haxe.macro.Expr;
import haxe.macro.Context;

class TiagoLrMacro {
    public static function build():Array<Field> {
        var fields = Context.getBuildFields();
        var setterBody = macro {
            name = v;
            TiagoLrMacroTest.MyStaticClass.staticMethod( this );
            return name;
        };
        fields.push({
            pos: Context.currentPos(),
            name: "set_name",
            meta: [],
            kind: FieldType.FFun({
                ret: macro :String,
                params: [],
                expr: setterBody,
                args: [{
                    value: null,
                    type: macro :String,
                    opt: false,
                    name: "v"
                }]
            }),
            doc: "",
            access: []
        });
        return fields;
    }
}

我在宏中调用静态方法时遇到的一个常见问题是不尊重导入,因此必须使用完整类型路径,如
mypackage.MyClass.myFunc(此)
,但您已经在这样做了,所以错误一定在代码中的其他地方。Happy macro ing:)

成功了,有趣的是,我仍然不知道我做错了什么,没有意义,重要的是它成功了,谢谢。总是让人沮丧!希望您能缩小范围,或者找到它,或者得到一个可复制的样本,这样我们就可以帮助:)
TiagoLrMacroTest.hx:15: hello