gpt4 book ai didi

scala - 为什么 Scala 有时需要在匿名函数中命名的参数?

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

我不明白为什么 scala 有时需要我将 args 命名为匿名 fns:

scala> case class Person(name: String)
defined class Person

scala> def reverseString(s: String) = s.reverse
reverseString: (s: String)String

scala> val p = Some(Person("foo"))
p: Some[Person] = Some(Person(foo))

scala> p map { reverseString(_.name) }
<console>:12: error: missing parameter type for expanded function ((x$1) => x$1.name)
p map { reverseString(_.name) }

// why does it only work when I name the argument? I'm not even telling it the type.
scala> p map { p => reverseString(p.name) }
res9: Option[String] = Some(oof)

// and shouldn't this fail too?
scala> p map { _.name.reverse }
res13: Option[String] = Some(oof)

最佳答案

答案在错误消息中,但隐含地是:

(x$1) => x$1.name

等等,什么?你想要 x$1 => reverseString(x$1.name)

所以现在你明白出了什么问题:它假定函数在 reverseString parens inside 中(即你想将函数传递给 reverseString)。通过显式命名变量,您可以向它证明它是错误的。

(它给出该消息是因为一旦它假定 reverseString 应该被传递给一个函数,它就不知道该函数的类型是什么,因为 reverseString 实际上想要一个字符串,不是函数。)

关于scala - 为什么 Scala 有时需要在匿名函数中命名的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12734450/

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