2015-06-24 4 views
0

У меня есть черта Image, представляющая изображение 2D ARGB. Image имеет метод map, который принимает функцию отображения и преобразует изображение с использованием указанной функции. Функция отображения имеет 3 параметра: координаты X и Y и цвет изображения в этой координате. Цвет представлен как 32-разрядное значение ARGB, упакованное в Int.Scala: Именование параметров функциональных параметров

trait Image { 
    def map(f: (Int, Int, Int) => Int) 
} 

Однако, без комментариев, это невозможно сказать, какой параметр f который.

В C#, я хотел бы создать делегат для этого, что позволяет мне назвать параметры функции отображения:

delegate int MapImage(int x, int y, int color); 

Есть ли что-нибудь в этом роде в Scala? Рассматривается ли это для добавления к языку? Без него я не могу написать интерфейс, который можно прочитать без явной документации.

(Примечание: Я знаю, что я должен обернуть Int в случае класса для целей, представляющего цвета, но это лишь иллюстративный пример.)

+0

Возможный дубликат [Как вы можете создавать собственные типы функций в Scala с именованными параметрами?] (Http://stackoverflow.com/questions/25644840/how-can-you-make-custom-function-types -in-scala-with-named-parameters) – the21st

ответ

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) 
} 
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. 
+0

Я не знал о SAM, это звучит как то, что я искал. Благодаря! – the21st

Смежные вопросы