如何在ActionScript 3函数中模拟关键字参数

7 arguments keyword actionscript-3

可以使用关键字= value的关键字参数调用Python中的函数.例如,以下功能:

def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
    print "-- This parrot wouldn't", action,
    print "if you put", voltage, "volts through it."
    print "-- Lovely plumage, the", type
    print "-- It's", state, "!"
Run Code Online (Sandbox Code Playgroud)

可以通过以下任何一种方式调用:

parrot(1000)
    parrot(action = 'VOOOOOM', voltage = 1000000)
    parrot('a thousand', state = 'pushing up the daisies')
    parrot('a million', 'bereft of life', 'jump')
Run Code Online (Sandbox Code Playgroud)

ActionScript 3没有此功能.我怎样才能最好地效仿呢?

gra*_*ukt 7

如果你陷入困境,它不会在编译时抛出任何错误,但你可以这样做:

public function awesomefunction(input:Object):void {
    if (input.foo) trace("got foo");
    if (input.bar) trace("got bar");
}
Run Code Online (Sandbox Code Playgroud)

然后在调用时这样做:

awesomefunction( { foo : 23, bar : 99 } );
Run Code Online (Sandbox Code Playgroud)

{}括号创建一个内联对象.以上代码的冗长版本可以这样写:

var obj:Object = new Object();
obj.foo = 23;
obj.bar = 99;
awesomefunction( obj );
Run Code Online (Sandbox Code Playgroud)

如果你给它一个数组:

awesomefunction( [23, 99 ] );
Run Code Online (Sandbox Code Playgroud)

([]是数组btw的简写)

索引可以像这样访问:

public function awesomefunction(input:Object):void {
    if (input[0]) trace("got foo");
    if (input[1]) trace("got bar");
}
Run Code Online (Sandbox Code Playgroud)

所以要把它全部带到你可以使用||的事实 operator返回首先计算为true的对象的值,而不仅仅是true:

public function awesomefunction(input:Object):void {
    var foo:int = input.foo || input[0];
    var bar:int = input.bar || input[1];
    if (foo) trace("got foo:", foo);
    if (bar) trace("got bar:", bar);
}
Run Code Online (Sandbox Code Playgroud)

因此,上述函数将为所有这三个调用提供相同的输出:

awesomefunction( { foo : 23, bar :55 } );
awesomefunction( { bar : 55, foo : 23 } );
awesomefunction( [ 23, 55 ] );
Run Code Online (Sandbox Code Playgroud)

但是这不允许你混合命名和编号,但你可以这样做:

awesomefunction( { foo : 23, 1 : 55 } );
Run Code Online (Sandbox Code Playgroud)

它不是很漂亮,但它有效!


Bra*_*don 0

您可以使用此处所示函数的可变数量参数来实现类似的功能。

  • 但这只是一个参数数组。这不会为您提供命名参数,或允许您更改参数顺序、排除参数等。 (3认同)