Wik*_*iup 11 parameters int actionscript function actionscript-3
我想实现以下逻辑:
function setMyValue (myVar:int = undefined):void
{
if (myVar == undefined)
{
/* Generate a value for myVar */
}
else
{
/* Use the supplied value for myVar */
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果提供了值,请使用它.如果没有,请生成它.看起来很简单.
问题是AS3不喜欢这个.'undefined'被强制转换为'0',所以myVar永远不会被定义.我尝试过使用NaN,null等变体,但没有任何效果.我能想到的唯一一个关键是提供一些"魔术数字"作为默认值使用,但那很难看.谁知道更好的解决方案?
谢谢!
dra*_*fly 14
UPD(来自我的评论):选择一些神奇数字来表示缺席肯定不是一个好习惯,除非你完全可以确定这个神奇数字不会出现在一些算术结果中(通常是真的).因此,这里最好的方法是使用比int
(例如Number
)更宽的类型,或者将一些标志(Boolean
值)传递给函数,以及int
指示实际值缺失.选择应取决于你是否要强调通过价值是不可或缺的事实的重要性.
如果您对扩展参数类型感到满意,那么您应该使用NaN
并执行以下操作:
function setMyValue (myVar : Number = NaN) : void
{
if ( isNaN(myVar) )
{
/* Generate a value for myVar */
}
else
{
/* Use the supplied value for myVar */
}
}
Run Code Online (Sandbox Code Playgroud)
这在技术上更准确,也更稳定.它还允许您在编译时强类型,并且不会像使用时那样导致奇怪的错误Object
.
请注意,这不会起作用,int
因为其中一个答案表明.int
也只有数值,并且NaN
将得到强制为0.您将需要使用Number
的类型.
如果你担心表现 - 不要.使用Number
代替int
或uint
一般都可以.
UPD:如果你想明确标记该参数应该是完整的,只需使用额外的标志和确切的类型 - 它会更清楚.
function setMyValue (isIntValueSupplied : Boolean = false, intValue : int = 0) : void
{
if ( isIntValueSupplied )
{
/* Generate or use a default value of intValue */
}
else
{
/* Use the supplied value for intValue */
}
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用附加值定义您自己的类型,例如MaybeInt
,它保存整数值和标志(无论它是否实际初始化).这样你就可以清楚地表明价值应该是积分的或没有价值的.但是,这种方法可能有点笨重.
归档时间: |
|
查看次数: |
14164 次 |
最近记录: |