gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:35:54 27 4
gpt4 key购买 nike

Python 中的函数可以使用keyword = value 形式的关键字参数调用。例如,以下函数:

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");
}

因此,为了将所有内容整合在一起,您可以使用 ||运算符返回首先计算为真的对象的值,而不仅仅是真做:
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 } );

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

关于actionscript-3 - 如何在 ActionScript 3 函数中模拟关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/410062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com