`
regular
  • 浏览: 75866 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

How to make D.eval invoke the user-defined function callback

阅读更多
When U want D.eval evaluate String like this:
import mx.events.CloseEvent;
import mx.controls.Alert;

function callback(ce: CloseEvent)
{
    trace(ce)
}
Alert.show("text", "title", 4, null, callback);

U will get an error:
Error #1034: Type Coercion failed: cannot convert r1.deval.rt::FunctionDef@50ef781 to Function.

So, it heavily impact the expression capacity of D.eval

For the sake of this problem, I've made a static method to propose a solution:
package utils
{
    import mx.controls.Alert;
    import mx.events.CloseEvent;
    
    import r1.deval.D;
    import r1.deval.rt.FunctionDef;

    public class Platform
    {
        public static function convert(callback: FunctionDef): Function
        {
            return function(param: * = null, ... params): * {
                if (params) {
                    params.splice(0, 0, param);
                } else {
                    params = new Array();
                    if (param) {
                        params.push(param);
                    }
                }
                return D.eval("callback.run(params)", {"callback": callback, "params": params});
            }
        }
    }
}

With this function, U now can write code as followed:

import utils.Platform;
import mx.events.CloseEvent;
import mx.controls.Alert;

function callback(ce: CloseEvent)
{
    trace(ce)
}
Alert.show("text", "title", 4, null, Platform.convert(callback));


And the demo source is attached below.
Because this question always raised in English, and no one replied, so I write this blog by English.
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics