有人可以向我解釋contramap
嗎?這個實現是什麼樣的?用法的好例子是什麼樣的?解釋逆向映射
// contravariant functor
trait Contravariant[F[_]] {
def contramap[A, B](f: B => A): F[A] => F[B]
}
來源:http://tmorris.net/posts/functors-and-things-using-scala/index.html
有人可以向我解釋contramap
嗎?這個實現是什麼樣的?用法的好例子是什麼樣的?解釋逆向映射
// contravariant functor
trait Contravariant[F[_]] {
def contramap[A, B](f: B => A): F[A] => F[B]
}
來源:http://tmorris.net/posts/functors-and-things-using-scala/index.html
如果你看看下面的Ordering.on
方法標準庫:
def on[U](f: U => T): Ordering[U]
你會看到,on
轉變的Ordering[T]
到Ordering[U]
在拍攝功能從U
到T
。因此,該方法on
證人的事實,Ordering
可以被看作是一個Contravariant
仿用:
def contramap[A, B](f: B => A) = (fa: Ordering[A]) => fa.on(f)
我也看到了託尼的博客文章和它幫助我終於使得這個三歲answer感從返璞詞到一個我的問題。
假設您有一個類Conversion[X,Y]
代表從類型X
的值到類型Y
的值的轉換。您可以將其與功能?=>X
結合使用以預處理輸入或使用功能Y=>?
對輸出進行後處理。例如:
trait Conversion[X,Y] { self=>
def apply(x: X): Y
def map[Z](f: Y=>Z) = new Conversion[X,Z] {
def apply(x:X): Z = f(self.apply(x))
}
def contramap[W](f: W=>X) = new Conversion[W,Y] {
def apply(w: W): Y = self.apply(f(w))
}
}
你的意思是「從'X'類型的值到'Y'類型的值嗎? – huynhjl 2013-03-17 16:56:43
@huynhjl謝謝。我修正了錯字。 – paradigmatic 2013-03-17 17:11:45
謝謝。很簡單,一旦你看到它。 – Bradford 2013-03-18 03:01:30