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] = ???
}
奖励积分使用_
作为你实现第一个字符。