当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在ActionScript3函数中模拟关键字参数》经验,为你挑选了1个好方法。

可以使用关键字= 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, "!"

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

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

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



1> grapefrukt..:

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

public function awesomefunction(input:Object):void {
    if (input.foo) trace("got foo");
    if (input.bar) trace("got bar");
}

然后在调用时这样做:

awesomefunction( { foo : 23, bar : 99 } );

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

var obj:Object = new Object();
obj.foo = 23;
obj.bar = 99;
awesomefunction( obj );

如果你给它一个数组:

awesomefunction( [23, 99 ] );

([]是数组btw的简写)

索引可以像这样访问:

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

所以要把它全部带到你可以使用||的事实 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);
}

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

awesomefunction( { foo : 23, bar :55 } );
awesomefunction( { bar : 55, foo : 23 } );
awesomefunction( [ 23, 55 ] );

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

awesomefunction( { foo : 23, 1 : 55 } );

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

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有