目前,我的代码如下所示:
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 = ...
,函数看起来很难看我怎么能消除它?
答案 0 :(得分: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界面来看,它看起来就像是在那里完成的,我理解它从效率的角度来看可能更好。
答案 1 :(得分: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;
答案 2 :(得分:1)
我实际上更喜欢
提供的额外类型检查val () = mapi gradient iImg
如果这看起来很丑陋,它应该 - 它不是很实用,而且标准ML绝对是一种功能性语言。