如何在AS3中使用函数类型(var f:Function)作为方法f(s:String)

时间:2009-11-19 09:15:24

标签: flex actionscript-3

我有一个类似这样的课程

public class Foo {
public var f:Function;
public void method(s:String)
{
  f.invoke(s);
}

}

所以我需要为f分配一个带有参数f(s)的函数,比如

myFoo.f = thefunction
function(s:String)

如何做到这一切,以便它能正常工作?

3 个答案:

答案 0 :(得分:4)

只是添加一个很好的例子:

        import mx.events.FlexEvent;
        public var f:Function;

        protected function application1_creationCompleteHandler(event:FlexEvent):void
        {
            f = addSmile;
            method(' my string');
            f = addFrown;
            method(' my string');

            // Or you can do it straight like this:
            f(' my string');


            // Or alternatively write a function for replacing f
            makeF(addSmile);
            f(' my string');
        }

        public function method(s:String):void
        {
            f(s);
        }

        private function addSmile(s:String):void
        {
            trace (s+' :)');    
        }
        private function addFrown(s:String):void
        {
            trace (s+' :(');    
        }                       

        protected function makeF(newF:Function):void
        {
            f= newF;
        }

将输出

 my string :)
 my string :(
 my string :(
 my string :)

答案 1 :(得分:3)

如果你有意义,怎么做匿名函数......

myFoo.f = function( s : String ) {
    //do Stuff to string
}

然后你可以使用上面的代码。

答案 2 :(得分:2)

你不应该指向任何地方,你的函数需要一个String参数。如果它需要 int ,或者需要2个参数,那么这将是一个运行时错误。


myFoo.f = myFunction;

public void function myFunction(s: String): void
{
}

public class Foo {
    public var f:Function;
    public void method(s:String)
    {
        f(s);
    }
}