2
我想了解Scala中下劃線的特殊用法。以下的一段代碼我不明白在函數調用中使用下劃線與Try參數
class Test[T, S] {
def f1(f: T => S): Unit = f2(_ map f)
def f2(f: Try[T] => Try[S]): Unit = {}
}
_
在這種情況下如何處理? T=>S
如何變成Try[T]=>Try[S]
?
我想了解Scala中下劃線的特殊用法。以下的一段代碼我不明白在函數調用中使用下劃線與Try參數
class Test[T, S] {
def f1(f: T => S): Unit = f2(_ map f)
def f2(f: Try[T] => Try[S]): Unit = {}
}
_
在這種情況下如何處理? T=>S
如何變成Try[T]=>Try[S]
?
看來你錯在讀它。看看f2(Try[T] => Try[S]):Unit
的類型。
然後看着f1我們有f: T => S
。
_
在價值位置desugars到f2(g => g map f)
。
讓我們來看看我們迄今知道:
f2(Try[T] => Try[S]):Unit
f: T => S
f2(g => g map f)
給1和3,我們可以推斷出的g
的類型必須是Try[T]
。在Try[T]
上的地圖需要T => Something
,以防f
這是T => S
,在這種情況下,東西是S
。
現在看起來可能有些困難,但是一旦你學會區分類型和值的位置readin,這種類型的代碼就變得微不足道了。
另一件要注意的事情def f2(f: Try[T] => Try[S]): Unit = {}
是相當無趣,可能有點不利於解決您的特定問題。
我試圖解決這個問題:首先忘記你創建的類。現在實現這個(更換???
有一個有用的執行):
object P1 {
def fmap[A, B](A => B): Try[A] => Try[B] = ???
}
獎勵積分使用_
作爲你實現第一個字符。