3

我试图了解 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]

4

1 回答 1

3

看来你读错了。看类型f2(Try[T] => Try[S]):Unit

然后查看 f1 我们有f: T => S.

_价值位置脱糖为f2(g => g map f)

让我们看看到目前为止我们所知道的:

  1. f2(Try[T] => Try[S]):Unit
  2. f: T => S
  3. f2(g => g map f)

给出 1. 和 3. 我们可以推断出 的类型g必须是Try[T]。map overTry[T]接管T => Something,如果fT => S,在这种情况下,Something 是S

现在可能看起来有点难以阅读,但是一旦你学会区分类型和值位置,阅读这种类型的代码就变得微不足道了。

另一件需要注意def f2(f: Try[T] => Try[S]): Unit = {}的事情非常无趣,可能对解决您的特定问题有点不利。

我会尝试这样解决这个问题:首先忘记您创建的课程。现在实现这个(???用一个有用的实现替换):

object P1 { 
  def fmap[A, B](A => B): Try[A] => Try[B] = ??? 
}

对于奖励积分_,请在您的实施中使用 char 作为第一个字符。

于 2017-05-02T01:22:54.320 回答