【问题标题】:ActionScript Defining a Static Constant ArrayActionScript 定义静态常量数组
【发布时间】:2010-05-21 13:15:51
【问题描述】:

不能定义一个静态常量数组吗?我想为一个颜色数组的函数提供一个可选参数,

private static const DEFAULT_COLORS:Array = new Array(0x000000, 0xFFFFFF);

public function myConstructor(colorsArray:Array = DEFAULT_COLORS)
{
}

我知道我可以使用 ...args 但我实际上想为构造函数提供 2 个单独的数组作为选项参数。

【问题讨论】:

    标签: actionscript-3 arrays static constants


    【解决方案1】:

    不可能,但你可以这样来模拟这种行为:

    private static const DEFAULT_COLORS:Array = new Array(0x000000, 0xFFFFFF);
    
    public function myConstructor(colorsArray:Array = null)
    {
        colorsArray = colorsArray ? colorsArray : DEFAULT_COLORS;
    }
    

    如果您的函数的编码方式使得 null 可能是一个有效值(例如,表示某些条件),这将不起作用,但这里可能不是这种情况。

    编辑

    如果您打算在 myConstructor 中写入 colorsArray,最好在此处复制 DEFAULT_COLORS:

    colorsArray = colorsArray ? colorsArray : DEFAULT_COLORS.slice();
    

    对 DEFAULT_COLORS 数组的引用是常量,但它的内容不是,因此您可能会意外更改默认值。

    【讨论】:

    • 感谢您的回答。效果很好。但是,您能解释一下我是如何通过不复制数组而意外更改默认颜色的吗?我不太明白你的意思。
    • @TheDarkIn1978。当然。如果您调用没有参数(或 null)的函数,colorsArray 将是对DEFAULT_COLORS 的引用。 IE。它将允许访问同一对象。然后,如果在您的函数中的某个时刻您执行了类似colorsArray[0] = 0xffcc99;colorsArray.splice(0,1); 或任何修改colorsArray 的操作,您将更改DEFAULT_COLORS 的内容,可能并非有意这样做。这是因为 colorsArray 将是对 DEFAULT_COLORS const 引用的同一对象的引用。复制,这不可能发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多