【问题标题】:AS3: Function that determines if parameter is int or NumberAS3:确定参数是 int 还是 Number 的函数
【发布时间】:2015-09-15 19:24:15
【问题描述】:

我想编写一个函数,它接受一个 int 或一个 Number 作为参数,并根据它的类型做不同的事情。我的第一个问题是在签名、对象或数字中使用什么?我在考虑 Number,因为它涵盖了 int 和 Number。

function myFunction(p:Number):void { //Should p be of type Object or Number?
    if (p is int) trace("Parameter is int.");
    else if (p is Number) trace("Parameter is Number.");
} 

问题是我希望它被归类为一个数字,如果参数有一个像 1.00 这样的小数点。那仍然会以 int 的形式出现。有谁知道如何做到这一点?我想我可以将 p 转换为字符串,然后检查它是否包含小数点,但我希望有更简单的方法。

【问题讨论】:

  • 使用 Number 类型,Object 成本高(因为它是动态类型)。
  • 为什么要区分1.001的输入?我的猜测是你应该有两个不同的函数,比如myFunctionForInteger(i:int)myFunctionForDecimal(n:Number),或者像muFunction(n:Number, decimalPrecision:int) 这样的附加参数。否则,就不清楚函数期望什么。

标签: actionscript-3 types parameters


【解决方案1】:

我看到的主要问题是下面这句话:

问题是如果参数有一个像 1.00 这样的小数点,我希望它被归类为数字。

假设我们有一个名为xint 变量,我们将其设置为1。它看起来像11.00 还是1x10^-1?答案始终是否定的。即使有人要输入这个:

myFunction(1.00);

这个数字实际上仍然看起来不像任何东西。这只是第一名。它的唯一表示基本上是它看起来在实际的机器位表示(浮点样式或只是000...001)。

它只是一个数字——无论是存储在Number 变量还是int 变量中。尝试将其转换为 String 无济于事,因为一开始就没有信息。最接近这一点的方法是使用String 作为参数类型,看看是否有人调用myFunction("1")myFunction("1.00")

只有在确实需要时才做这样的事情,因为实际上可以存储在 String 中的内容范围很广。否则,您的 is 关键字应该是最好的选择。但无论您选择哪一个,都不要使用Object 或无类型参数;使用String 或(更优选)Number

【讨论】:

    猜你喜欢
    • 2010-10-24
    • 2014-03-07
    • 2017-12-21
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    相关资源
    最近更新 更多