我试图了解Scala中下划线的特殊用法。以下代码我无法理解
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]
?
答案 0 :(得分:3)
看来你错误地读了它。查看f2(Try[T] => Try[S]):Unit
的类型。
然后查看f1我们有f: T => S
。
价值位置_
去了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
。
现在看起来有点难以阅读,但是一旦你学会区分类型和值位置,这种类型的代码变得微不足道。
需要注意的另一件事def f2(f: Try[T] => Try[S]): Unit = {}
非常无趣,可能对解决您的特定问题有点不利。
我试着像这样解决这个问题:首先忘记你创建的课程。现在实现这个(用有用的实现替换???
):
object P1 {
def fmap[A, B](A => B): Try[A] => Try[B] = ???
}
对于奖励积分,请使用_
作为实施中的第一个字符。