2014-10-30 184 views
1

我在尝试升级Socket.IO extern,并且遇到了问题。Extern动态属性

到目前为止,设置一个变量,他们用

socket.set(key, val, callback); 

但现在是

socket.key = val; 

(见GitHub问题)


我怎么来在Haxe中反映这种行为?

欢迎任何线索!

回答

2

我会建议使用内联函数:

public inline function set(key : String, value : Dynamic) 
    Reflect.setField(this, key, value); 
+0

赞[this](http://try.haxe.org/#B5E8E)?这看起来不错,但我想尽可能少地改变语法。 IRC上的某个人告诉我可以实现Dynamic,或者使用宏来在场上生成这些字段。我不知道哪一个是最好的 – NorTicUs 2014-10-31 10:52:49

+0

您是否尝试过“实现动态”?这听起来像是最简单的解决方案。 – 2014-11-02 18:50:29

+0

是的,它确实有效,但我正在填充像我正在浪费Haxe打字系统。但也许它不能帮助 – NorTicUs 2014-11-03 12:52:01

1

你也可以使用 “using” 的关键字。

class SocketExtender { 
    public static inline function set(socket:Socket, key:String, value:Dynamic):Void { 
     Reflect.setField(socket, key, value); 
    } 
    public static inline function get(socket:Socket, key:String):Dynamic { 
     Reflect.field(socket, key); 
    } 
} 

然后添加“using com.my.package.SocketExtender;”你进口,你的代码应该重新开始工作。

+0

这与佛朗哥的答案类似,但我将不得不写另一个班级。由于我可以直接在类Socket中编写,所以我不确定如何使用帮助 – NorTicUs 2014-11-01 11:18:46

+0

哦,我想我误解了你的帖子。你愿意改变你编写'set(...)'的所有地方,但是你想把它们改成“正确的”语法('socket.x = y'),而你不是确定如何使后者工作。那是对的吗? – 2014-11-02 18:46:07

+0

完全正确!我的目标是“复制”NodeJS语法,因此useres可以在不更改代码的情况下切换到Haxe – NorTicUs 2014-11-03 12:51:01