我试图了解 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]
?
我试图了解 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]
?
看来你读错了。看类型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]
。map overTry[T]
接管T => Something
,如果f
是T => S
,在这种情况下,Something 是S
。
现在可能看起来有点难以阅读,但是一旦你学会区分类型和值位置,阅读这种类型的代码就变得微不足道了。
另一件需要注意def f2(f: Try[T] => Try[S]): Unit = {}
的事情非常无趣,可能对解决您的特定问题有点不利。
我会尝试这样解决这个问题:首先忘记您创建的课程。现在实现这个(???
用一个有用的实现替换):
object P1 {
def fmap[A, B](A => B): Try[A] => Try[B] = ???
}
对于奖励积分_
,请在您的实施中使用 char 作为第一个字符。