1

目前,我的代码如下所示:

fun gradImage () =
    let val iImg = Gdimage.image(640,480) (0,0,0);
        val void = mapi gradient iImg;
    in
        Gdimage.toPng iImg "gradient.png"
    end;

mapi 是一个 int int->int int*int->image->unit 类型的函数。本质上,它对提供的图像进行操作。

该函数看起来很难看 val void = ...

我怎么能消除它?

4

3 回答 3

2

您可以在表达式之间in和表达式end中拥有let表达式列表。所以你可以重写你的代码

fun gradImage () =
    let
        val iImg = Gdimage.image(640,480) (0,0,0)
    in
        mapi gradient iImg;
        Gdimage.toPng iImg "gradient.png"
    end;

我假设mapi修改iImg到位,因为代码似乎是这样编写的。这听起来不太实用。mapi返回修改后的感觉会更自然image,但从我可以看到的 Gdimage 界面来看,它看起来像是在那里完成的,我理解从效率的角度来看它可能会更好。

于 2010-01-01T21:51:20.827 回答
1

我实际上更喜欢由

val () = mapi gradient iImg

如果这看起来很难看,它应该是——它不是很实用,而标准 ML 绝对是一种函数式语言。

于 2010-01-02T00:16:19.410 回答
1

我使用 SML 已经十年了,但我相信您正在寻找的是:

fun gradImage () =
    let val iImg = Gdimage.image(640,480) (0,0,0)
    in
        ignore (mapi gradient iImg);
        Gdimage.toPng iImg "gradient.png"
    end;
于 2010-01-01T21:50:20.563 回答