【问题标题】:Nested Array/Object access via [String][String]通过 [String][String] 访问嵌套数组/对象
【发布时间】:2016-12-13 12:32:09
【问题描述】:

在 AS3 中,我可以按如下方式访问嵌套数组/对象:

var platformObj:Object = {"filters": {"manufacturer": ["Adobe Windows"]};
trace(platformObj["filters"]["manufacturer"]); //trace output: "Adobe Windows";

Haxe 中的错误:字符串应为 Int(对于第二个参数):
platformObj["filters"]["manufacturer"]

如何在 Haxe/OpenFL 中做到这一点?

【问题讨论】:

    标签: arrays string haxe openfl


    【解决方案1】:

    openfl.utils.Object 基本上只是typedefDynamic,所以以下工作正常:

    trace(platformObj.filters.manufacturer); // [trace] Main.hx:6: [Adobe Windows]
    

    如果您需要使用String 访问字段,您可以使用type check 执行以下操作:

    trace((platformObj["filters"] : Object)["manufacturer"]);
    

    在后台,所有这些都只是reflection

    trace(Reflect.field(Reflect.field(platformObj, "filters"), "manufacturer"));
    

    【讨论】:

    • 第三个选项正是我正在寻找的,对我来说最有意义,实际上我正处于解决这个问题的边缘 - 很高兴我问了,很高兴知道其他方式去做吧!
    【解决方案2】:

    你可以只使用点符号:

    var platformObj = {filters: {manufacturer: ["Adobe Windows"]}};
    // the type of platformObj is `{filters:{manufacturer:Array<String>}}` in this case
    trace(platformObj.filters.manufacturer);
    

    或者你可以使用StringMap

    var platformObj = ["filters" => ["manufacturer" => ["Adobe Windows"]]];
    // the type of platformObj is `Map<String, Map<String, Array<String>>>` in this case
    trace(platformObj["filters"]["manufacturer"]);
    

    Haxe 没有Object,但有Dynamic。您可以使用Reflect 检索其字段:

    var platformObj:Dynamic = {filters: {manufacturer: ["Adobe Windows"]}};
    var filters = Reflect.field(platformObj, "filters");
    var manufacturer = Reflect.field(filters , "manufacturer");
    trace(manufacturer);
    

    当您使用 Haxe 3.3+ 时,您可以使用 Any 而不是 Dynamic

    前两个使用起来更安全。最后一个使用动态/反射可能会产生副作用。

    【讨论】:

    • 使用对象来包含我提到的信息与动态之间有什么区别?如果我使用 Dynamic,Object 的哪些限制会被解除?感谢 StringMap 的提及,我将来会使用 strict.
    • Haxe 本身没有 Object,但有 Dynamic。
    • 哦,是的,哎呀,我也在使用 OpenFL,所以我同时使用了 Haxe 和 OpenFL。
    • 啊,我不太了解openFL。似乎他们创建了一个抽象类Object,它是 Dynamic 的别名,具有一些额外的功能。 api.openfl.org/openfl/utils/Object.html
    • Any 和 Dynamic 的用例区别是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多