首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AS3:为int、uint或Number声明“未定义”的参数

AS3:为int、uint或Number声明“未定义”的参数
EN

Stack Overflow用户
提问于 2009-05-08 15:39:04
回答 4查看 14.3K关注 0票数 11

我想实现以下逻辑:

代码语言:javascript
运行
复制
function setMyValue (myVar:int = undefined):void
{
    if (myVar == undefined)
    {
        /* Generate a value for myVar */
    }
    else
    {
        /* Use the supplied value for myVar */
    }
}

因此,如果提供了该值,请使用它。如果不是,则生成它。看起来很简单。

问题是AS3不喜欢这样。“undefined”被强制转换为“0”,因此myVar永远不是未定义的。我尝试过使用NaN、null等变体,但都不起作用。我能随手想到的唯一办法就是提供一些‘魔术数字’作为默认值,但这太丑陋了。有人知道更好的解决方案吗?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-08 17:40:40

UPD (来自我的评论):选择一些魔术数字来表示值的缺失肯定不是一个好的实践,除非你可以完全确定这个魔术数字不会因为某些算术而出现(这通常是真的)。因此,这里最好的方法是使用比int更宽的类型(例如Number),或者将一些标志(Boolean值)传递给函数以及int,以指示实际的值缺失。选择应该取决于您是否想要强调传递的值是整数这一事实的重要性。

如果您对扩展参数类型感到满意,那么您应该使用NaN并执行以下操作:

代码语言:javascript
运行
复制
function setMyValue (myVar : Number = NaN) : void
{
    if ( isNaN(myVar) )
    {
        /* Generate a value for myVar */
    }
    else
    {
        /* Use the supplied value for myVar */
    }
}

这既在技术上更准确,也更稳定。它还允许您在编译时进行强类型,并且不会像使用Object时那样导致奇怪的错误。

请注意,正如其中一个答案所建议的那样,这不适用于intint只有数值,NaN将被强制为0。您将需要使用Number类型。

如果你担心性能--不用担心。使用Number而不是intuint通常是可以的。

更新:如果您想显式地将参数标记为整型,只需使用额外的标志和确切的类型-这将更加清晰。

代码语言:javascript
运行
复制
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 */
    }
}

另一种选择是使用附加值定义您自己的类型,例如MaybeInt,它保存整数值和一个标志(无论它是否实际初始化)。这样,您就可以清楚地表示值应该是整型的或无值的。然而,这种方法可能有点笨重。

票数 14
EN

Stack Overflow用户

发布于 2009-05-08 15:45:55

生成的值是常量吗?如果是,为什么不简单地将其设为默认值呢?

的问题是AS3不喜欢这样。“undefined”被强制转换为“0”,因此myVar永远不是未定义的。

是的,因为这是int的默认初始化值(对于stringObject,这将是null)。

另一种选择是松散地将参数类型化为Object,或者不指定它(通过使用*),如果它不是int,则稍后将其类型转换为null

代码语言:javascript
运行
复制
function setMyValue (myVar:Object = null):void
{
    if (myVar == null)
    {
        /* Generate a value for myVar */
    }
    else
    {
        int value = myVar as int;
        /* Use the supplied value for myVar */
    }
}
票数 2
EN

Stack Overflow用户

发布于 2010-08-20 19:00:20

我的解决方案就是简单地使用这个

代码语言:javascript
运行
复制
if(myUint == new uint){ is undefined, act appropriately; }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/840469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档