可以使用关键字= 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没有此功能.我怎样才能最好地效仿呢?
如果你陷入困境,它不会在编译时抛出任何错误,但你可以这样做:
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 } );
它不是很漂亮,但它有效!