我有一个代表2D ARGB图像的Image
特征。 Image
有一个map
方法,它采用映射函数并使用所述函数转换图像。映射函数有3个参数:X和Y坐标以及该坐标处图像的颜色。颜色表示为打包到Int
的32位ARGB值。
trait Image {
def map(f: (Int, Int, Int) => Int)
}
但是,如果没有评论,就无法确定f
的哪个参数是哪个。
在C#中,我会为此创建一个委托,它允许我命名映射函数的参数:
delegate int MapImage(int x, int y, int color);
Scala中有这种类似的东西吗?是否考虑添加语言?没有它,我就无法编写一个没有明确文档的可读性接口。
(注意:我知道我应该将Int
包装在案例类中以表示颜色,但这只是一个说明性的例子。)
答案 0 :(得分:1)
您可以声明f
实施的特征。使用SAM支持(如果使用-Xexperimental
进行编译,则启用,并且将在下一版本中使用),这应该同样易于使用。
trait ImageMapper {
def mapImage(x: Int, y: Int, color: Int): Int
}
trait Image {
def map(f: ImageMapper) = ...
}
myImage.map{ (x, y, color) => ... } //the anonymous function
// is automatically "lifted" to be an implementation of the trait.
答案 1 :(得分:0)
也许通过使用类型:
trait Image {
type x = Int
type y = Int
type color = Int
def map(f: (x, y, color) => Int)
}
我更喜欢像这样使用案例类:
case class MapImage(x: Int, y: Int, color: Int)
trait Image {
def map(f: MapImage => Int)
}