将具有用户可提供的回调的算法透明化为目标语言

时间:2017-04-28 07:12:38

标签: haxe

我目前将在SCXML状态图中建模的控制流转换为ANSI-C algorithm,它以正确的顺序调用一系列用户提供的回调函数,有效地实现了状态图或ANSI的控制流程-C。看到更多目标语言可能最终出现,我正在考虑将Haxe转换为准规范形式,并使用它们的转换功能来定位其他语言。

看到Haxe本质上是面向对象的,我想最好的方法是使用已转换的算法生成一个抽象基类,该算法将通过回调的实现进行扩展。

然而,看看Haxe,这似乎是一种相当不正统的用法,我不知道如何最好地接近它。我无法在Haxe的目标语言不可知部分找到本机回调,所以我想它归结为目标语言特定方法无论如何?

更新:我想以目标语言调用用户提供的回调。这里的状态图仅仅规定了某个控制流程。根本没有涉及Haxe的XML解析,我已经解析了XML,处理它并生成接受用户提供的回调的ANSI-C。现在我想绕过Haxe来生成任何目标语言,用户提供的回调和所有“脚手架”都是目标语言。

1 个答案:

答案 0 :(得分:1)

如果每次回调只需要一个监听器,那么每次回调只使用一个函数,我宁愿不预测监听器需要什么数据。

在此处运行js示例:https://try.haxe.org/#2a6d2

以下代码表示完整性。

class Test {
    static function main() { new Test(); }
    var testing: WithCallback;
    public function new(){
        testing = new WithCallback( output );
        testing.start();
    }
    public function output(){
        trace( 'test ' + testing.val );
    }
}
class WithCallback{
    public var cb: Void->Void;
    public var val: String;
    public function new( cb_: Void -> Void ){
        cb = cb_;
    }
    public function start(){
        for( i in 0...100 ){
            val = 'callback counting ' + Std.string( i );
            if( cb != null ) cb();
        }
    }
}

如果你想要多个对象进行监听,那么你可以查看一些Signal类型库,我相信Tink(宏库)提供了一个但没有尝试过。 https://github.com/haxetink/tink_core/blob/master/src/tink/core/Signal.hx

周围必须有一些信号库。 https://code.google.com/archive/p/hxs/ https://github.com/massiveinteractive/msignal

你可能还想看看Json如何在Haxe中使用摘要和typedef进行autoparsed,使用像' @ to'和' @来自'。 https://haxe.org/manual/std-Json-parsing.html

因此,例如,使用Time字段解析一些json的好方法是使用字符串周围的抽象解析带有时间字段的typedef,并在抽象中添加一个方法,以便从抽象中获取类型。 https://haxe.org/manual/types-abstract-implicit-casts.html

我认为其他人已经采用了类似的xml解析方法,但如果你研究haxe.Json.parse的内部结构,我相信你可以为xml或二进制提要创建一个类似的方法(不确定是否franco' s流的东西是相关的)。还有一种方法可以让haxe基于使用非常智能的宏的示例生成用于json解析的typedef代码,但我想根据数据示例获取haxe宏来构造解析器是非常困难的。

另外,您应该查看格式库,它有许多解析数据的示例。 https://github.com/HaxeFoundation/format