我有一个程序对2D数值数组执行一系列操作(例如,int [,]或float [,]),其中我的代码如下:
let a3 = array |> f1 |> f2 |> f3
在Matlab或Octave中,我会编写如下代码:
a1 = f1(array);
a2 = f2(a1);
a3 = f3(a2);
在开发过程中,我经常希望将中间值看作图像,如下所示:
a1 = f1(array);
figure;imshow(a1);
a2 = f2(a1);
figure;imshow(a2);
a3 = f3(a2);
是否有一种简单的方法可以在F#中编写例程:
val myplot: 'a [,] -> ()
此函数打开一个包含画布的窗口,我可以在其上绘制相应的数组,然后立即返回。鉴于这样的事情,我可以 写:
let plotThrough (x: 'a [,]) =
myplot x
x
这将允许我的管道成为:
let a3 = array |> f1 |> plotThrough |> f2 |> plotThrough |> f3
在这种情况下,会出现两个独立的窗口,一个包含我的f1结果图,另一个包含f2的结果。
我遇到的问题不是绘制到画布部分(这很容易 - 请求图形上下文,绘制它),但如何为每个绘图命令生成一个窗口,以便我可以获取图形上下文画进去。我有一个有限的测试工具,这是一个静态设计的表单GUI,有几个图像存在,给我图形上下文,但我宁愿不必设计一个表单,每次我想尝试不同的管道与不同我想看的地块数量。
注意:我对假设一个人正在使用fsi REPL的解决方案不感兴趣 - 我希望能够拥有一个可执行文件,在运行时,会为每个绘图弹出一组窗口,然后等待所有它们在终止之前就要关闭了。