如何从Public函数返回变量

时间:2013-07-08 14:21:56

标签: actionscript-3 flash-cs5

我正试图摆脱在主时间轴上使用代码,但我很难理解.as文件和.fla文件是如何交互的。例如,我试图弄清楚如何将变量从主时间轴传递到公共函数,对该变量执行一些操作并将其传递回主时间轴。我在框架上有一个输入文本框和一个带有监听器的简单按钮。我希望能够在文本框中输入00000 00,并返回0.00。以下是我的代码:

import flash.events.MouseEvent;
import convertToDecimal;
var inputText:String;
var outputText:String;

submit_btn.addEventListener(MouseEvent.CLICK, submit);

function submit(e:MouseEvent):void
{
    inputText = input_txt.text;
    new convertToDecimal(inputText);
    trace();
}

这是公共职能:

package
{
    import flash.sampler.StackFrame;
    import flash.events.MouseEvent;
    import fl.controls.Button;
    public class convertToDecimal
    {
        public function convertToDecimal(stringParmter:String)
        {
            var rex:RegExp = /[\s\r\n]+/gim;
            stringParmter = stringParmter.replace(/^\s+|\s+$/g, '');
            stringParmter = stringParmter.replace(rex,'.');
            stringParmter = stringParmter.replace(/^0+(?!\.|$)/, '');
            if ((stringParmter == "-----.--") || (stringParmter == "0"))
            {
                stringParmter = "      00";
            }
        }
    }
}

这可能是一个真正的noob问题,但任何帮助都表示赞赏。

2 个答案:

答案 0 :(得分:2)

如果您有课程,为了使用它,您必须构建其“副本”并将其分配给变量。构建你的课程非常简单:

new convertToDecimal(inputText); // does the constructing job

但接下来会发生什么?当你的程序进入下一行时,你构建的类将被释放!您必须将其分配给变量,以便将其保留在内存中:

var yourVariableName:convertToDecimal = new convertToDecimal(inputText);

现在你有了课堂的“副本”。 OOP范例是好的,因为你可以很容易地创建大量的“副本”,然后,每个“副本”将通过它自己的直播生活。


现在回到你的问题。将代码添加到时间线并不是一个秘密。而是将您的课程附加到您的项目并以这种方式进行更改:

    package
{
    import flash.sampler.StackFrame;
    import flash.events.MouseEvent;
    import fl.controls.Button;

    public class Main
    {
        public function Main()
        {
            submit_btn.addEventListener(MouseEvent.CLICK, submit);

        }

        private function submit(e:MouseEvent):void
        {
            var inputText:String = input_txt.text;
            inputText = convertToDecimal(inputText);
            trace(inputText);
        }

        private function convertToDecimal(stringParmter:String):String
        {
            var rex:RegExp = /[\s\r\n]+/gim;
            stringParmter = stringParmter.replace(/^\s+|\s+$/g, '');
            stringParmter = stringParmter.replace(rex, '.');
            stringParmter = stringParmter.replace(/^0+(?!\.|$)/, '');
            if ((stringParmter == "-----.--") || (stringParmter == "0"))
            {
                stringParmter = "      00";
            }
            return stringParmter;
        }
    }
}

答案 1 :(得分:0)

简单类型的参数按值传递,因此为了返回更改的String,请使公共函数返回String

public function convertToDecimal(stringParmter:String):String {...}

然后,当您想出一个想要在外面可用的值时,在函数中添加return <the value>;语句。为了捕获函数返回的值,将其赋值给变量,可以使用与传入函数相同的变量。

stringParameter=convertToDecimal(stringParmter);

此外,如果您的AS3文件仅包含该函数,则可以避免将其包装到类中,并直接声明“公共函数...”。

package
{
    public function convertToDecimal(stringParmter:String):String
    {
            var rex:RegExp = /[\s\r\n]+/gim;
            var s:String;
            s = stringParmter.replace(/^\s+|\s+$/g, '');
            s = s.replace(rex,'.');
            s = s.replace(/^0+(?!\.|$)/, '');
            if ((s == "-----.--") || (s == "0"))
            {
                s = "      00";
            }
            return s;
    }
}