2014-10-30 187 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