gpt4 book ai didi

scala - 在带有 Try 参数的函数调用中使用下划线

转载 作者:行者123 更新时间:2023-12-01 13:35:24 28 4
gpt4 key购买 nike

我试图理解 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)

让我们看看到目前为止我们知道了什么:

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

给出 1. 和 3. 我们可以推断 g 的类型必须是 Try[T]Try[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] = ???
}

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

关于scala - 在带有 Try 参数的函数调用中使用下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43728579/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com