【发布时间】:2016-10-24 20:21:23
【问题描述】:
大家好 StackExchange,这是我的第一篇文章,因为我已经尽力自己解决这个问题,但我找不到与我在 AS3 中的解决方案相匹配的真正好的解决方案。
AS3 代码:
//create player
R.instance({_origin: this, _updatable: 1, _saveToXML: 1, _bodyType: "DYNAMIC", _type: "o_nape_player", _sprite: "idle/CharacterIdle", _x: -32, _y: -512});
//R.instance function exposed + showing how the parameters_ get's passed through
class RInstance {
public static function create(parameters_:Object = null):Dynamic {
var instance:XxxxObject = null;
var _type:String = parameters_._type;
switch (_type) {
case "o_nape_player": instance = new O_nape_player(parameters_);
}
parameters_._origin.addToArrayObject( instance );
return instance;
}
}
//o_nape_player.as
public function XxxxObject(parameters_:Object = null) {
parameters = parameters_;
}
protected function set parameters(parameters_:Object):void {
var parameter:String;
for (parameter in parameters_) {
this[parameter] = parameters_[parameter];
}
parameters_ = null;
}
所以正如标题所说,在 Haxe 中,我将如何设置类的变量,基于扔给准备解包的类的一袋变量?
我得到的最接近的结果,但这不是我想要的结果,因为它需要 setter 函数:
override public function set_parameters(object:Dynamic):Void {
for (param in Reflect.fields(object)) {
try {
Reflect.callMethod(this, Reflect.field(this, "set" + param.charAt(0).toUpperCase() + param.substr(1)), [Reflect.field(object, param)]);
} catch (e:Dynamic) {
//....
}
}
}
感谢您的宝贵时间。拜托,我必须强调,正如我刚才所说,这不是我想要的结果,我希望我的 Haxe 代码尽可能与我的 AS3 代码对齐,我的 AS3 代码不需要 setter 函数来设置属于上课。
TL;DR
使用上面发布的所有代码,我可以简单地改写这个问题; 如何在 Haxe 中尽可能简单地复制它: this[参数] = 参数_[参数];
【问题讨论】:
-
如果您只针对 AS3,并且没有类型化,您可以对 Object 使用数组访问。 try-haxe.mrcdk.com/#091A6
标签: actionscript-3 haxe