【问题标题】:How does Vector map() work in actionscript 3?Vector map() 如何在 actionscript 3 中工作?
【发布时间】:2011-02-02 14:49:52
【问题描述】:

我无法让 map() 函数与 Vector 类一起使用。

结果总是返回 null - 它应该返回一个带有 addFive 函数返回值的新向量(这个例子显然不是我的真实用例)。

数组版本按预期工作。

有没有人幸运地让 map() 与 Vector 一起工作?

    public function test_vector_map():void {
        var v1:Vector.<uint> = new <uint>[1,2,3];
        trace(v1); // traces 1,2,3

        var v2:Vector.<uint> = v1.map(addFive);
        trace(v2); // traces null
    }             

    protected function addFive(item:uint, index:int, vector:Vector.<uint>):uint
    {
        return item+5;
    } 

    public function test_array_map():void {
        var v1:Array = [1,2,3];
        trace(v1); // traces 1,2,3
        var v2:Array = v1.map(addSix);
        trace(v2); // traces 7,8,9
    }             

    protected function addSix(item:uint, index:int, array:Array):uint
    {
        return item+6;
    }  

【问题讨论】:

  • 确认:v1 Vector 没有被 map() 函数改变。
  • 已确认:将 v1 或测试类本身作为 'this' 对象(函数中有 this 引用时使用的第二个可选参数)没有区别。
  • 已确认:将 addFive 函数设置为运行地图的代码的本地函数也没有任何区别。
  • 已确认:我最初是用 uint 以外的类型打这个的,所以我认为它不是特定于 uint 类型的。
  • 我自己试着搞砸了一段时间。非常奇怪的是 map 函数失败并返回 null 而没有任何错误消息。很可能是一个 flex/as3 错误。现在可能会卡住使用数组

标签: flash apache-flex actionscript-3


【解决方案1】:

这是一个动作脚本/Flash 播放器错误。似乎 adobe 已在内部对其进行了修复,但从 Flash Player 10.1 开始,该修复程序尚未发布。

见: https://bugzilla.mozilla.org/show_bug.cgi?id=513095

这是我们在这里发现的错误的根本原因:

https://bugzilla.mozilla.org/show_bug.cgi?id=507501

你现在能做的最好的事情就是在需要 Map 时坚持使用数组

【讨论】:

  • 感谢您为我找到了这个 - 至少我不会发疯。
【解决方案2】:

奇怪...我看到你的确认。你总是可以选择这个解决方案:

var v1:Vector.<uint> = new <uint>[1,2,3];
trace(v1); // traces 1,2,3

var v2:Vector.<uint> = v1.slice();
v2.forEach( addFive );
trace(v2); // traces 6,7,8

【讨论】:

  • 谢谢 - 我试图更多地利用看似有用的 map/filter 等功能 - 我通常使用 for(var i...) 循环来处理这些事情(比 forEach 更快)所以我会回到长手。为我确认它干杯。
猜你喜欢
  • 2018-12-03
  • 2011-03-26
  • 1970-01-01
  • 2011-04-29
  • 2015-09-03
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多