我目前将在SCXML状态图中建模的控制流转换为ANSI-C algorithm,它以正确的顺序调用一系列用户提供的回调函数,有效地实现了状态图或ANSI的控制流程-C。看到更多目标语言可能最终出现,我正在考虑将Haxe转换为准规范形式,并使用它们的转换功能来定位其他语言。
看到Haxe本质上是面向对象的,我想最好的方法是使用已转换的算法生成一个抽象基类,该算法将通过回调的实现进行扩展。
然而,看看Haxe,这似乎是一种相当不正统的用法,我不知道如何最好地接近它。我无法在Haxe的目标语言不可知部分找到本机回调,所以我想它归结为目标语言特定方法无论如何?
更新:我想以目标语言调用用户提供的回调。这里的状态图仅仅规定了某个控制流程。根本没有涉及Haxe的XML解析,我已经解析了XML,处理它并生成接受用户提供的回调的ANSI-C。现在我想绕过Haxe来生成任何目标语言,用户提供的回调和所有“脚手架”都是目标语言。
答案 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