【问题标题】:Call a function if String number is inferior to 0?如果字符串数小于 0,则调用函数?
【发布时间】:2014-02-01 03:35:51
【问题描述】:

我的 Toolbar.as 中有这段代码:

var money = 9999; 
argent.text = String(money); 
trace(money);

怎么说呢

if (money < 0){
callFunction(); 
}

非常感谢您的回答


编辑

我什么都试过了。

这就是我所做的:

var money:int = 9999; 

argent.text = money.toString();
trace(money);
stageRef.addEventListener("checkingMoney", checkMoney, false, 0, true);

我添加了 EventListner 来检查钱(因为如果之前钱

然后:

public function checkMoney(event):void{
             var money;
            trace("checking");
        if (parseInt(money) < 0){
    trace("dangerous");  
}
}

所以功能很好触发(跟踪“检查”打开),但即使数字低于0(-4600),跟踪“危险”也不会出现.. 我不明白。

【问题讨论】:

标签: actionscript-3


【解决方案1】:

您需要了解数据类型的工作原理。它在所有基于 OOP 的语言中的工作方式都类似,因此实际上不需要专门针对 AS3 的文章。不过,请避免任何有关 PHP 数据类型的内容。

但是,对于您发布的内容,您做错了一些事情。

首先,每个对象(无论是变量、函数还是类)都应该声明数据类型。你可以不这样做,但如果你这样做,你的应用程序会运行得稍微快一些,并且编译器警告的机会更少。

所以

var money = 9999;

应该是

var money:int = 9999; // could also use Number (AS3's float) or uint

您也应该避免使用诸如String(money) 之类的硬转换。这可能很慢并且可能导致错误。要将Number 转换为String,您应该始终使用Number.toString(),因为这是它的预期目的,我相信它已经过优化,而其他转换类型则没有。

if (money &lt; 0) 实际上是正确的。它可能会抛出 IDE 警告,因为您没有设置 money 的类型。如果需要比较数字 String 值,则需要使用 Number(var) 将其转换回数字。请注意,将String 转换为Number 是您想使用硬转换DataType(object) 而不是软转换(object as DataType) 的少数情况之一。

【讨论】:

    【解决方案2】:

    我不明白这个问题。

    第一个money 变量缺少类型。

    如果这里的钱是int 比:

    var money:int = 9999; 
    argent.text = money.toString();
    trace(money);
    
    if (money < 0){
        callFunction(); 
    }
    

    这应该可行。

    如果由于某种原因,这里的钱是String,那么: 变种钱:字符串=“9999”; argent.text = 钱; 追踪(钱);

    if (Number(money) < 0){
        callFunction(); 
    }
    

    【讨论】:

    • 或:if (parseInt(money) &lt; 0){
    • 不明白为什么它不起作用。你们说的一切我都试过了。我正在编辑我的帖子。
    • 嗯,但是在函数 checkMoney 中,您声明了新的 money 变量但没有设置它。默认情况下它是 0(不是
    • 我试过 var money:int = 9999,没有用。我什么都没写,但它说“钱”是未定义的。没有任何效果。
    【解决方案3】:

    我通常不这样做,但我发布了第二个答案,因为您的编辑与您最初发布的完全不同。为了将来参考,请发布相关的整个代码。您最初似乎错过了一些上下文并迫使我们解决了错误的问题(不要误会我的意思,它仍然需要修复,但这不是手头的问题)

    所以您看到的是范围问题。基本上,在对象中声明的对象(ClassFunction、循环或条件)仅在该对象和子对象中可用。此外,在类的顶级范围内声明的所有对象必须具有访问修饰符(publicprivateinternalprotected、等)。

    让我们假设这个类结构:

    public class ClassName {
        public function ClassName();
        public function checkMoney();
    }
    

    在构造函数 (ClassName()) 中声明的对象在 checkMoney() 中不可用。所以你需要做以下两件事之一:

    在顶级范围内声明对象:

    public class ClassName {
        private var money:int;
        public function ClassName(){
             money = 9999;
             checkMoney()
        }
        public function checkMoney() {
             // you now have access to money
        }
    }
    

    或将对象传递给函数:

    public class ClassName {
        public function ClassName(){
             var money:int = 9999;
             checkMoney(money);
        }
        public function checkMoney(value:Number) {
             // check "value" here. Note that Numbers and Strings are NOT passed be reference, so changing the value will NOT change the original variable
        }
    }
    

    【讨论】:

    • 谢谢你,很抱歉我的编辑。下次我会发布整个代码。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2017-06-27
    • 2013-12-11
    • 2013-01-16
    • 2023-01-26
    • 1970-01-01
    相关资源
    最近更新 更多