scala - Scala中的 "recursive method <method name> needs type"是什么意思?

标签 scala

当我尝试从方法调用中省略点时,例如在此示例程序中:

object Test extends Application {
  val baz = new Baz
  var foo = baz bar
  println(foo)
}

class Baz {
  def bar = "bar"
}

我收到奇怪的错误。第一个是error: recursive method foo needs type: println foo,另一个是error: type mismatch; found: Unit, required: Int, println(foo)。如果我指定foo的类型应为String,则将以某种奇怪的方式解决第一个错误。在我在bazbar之间加一个点之前,第二个不会消失。这是什么原因造成的?为什么Scala认为baz bar是一种递归方法?

最佳答案

您看到的问题是,如果省略点,则代码不明确。编译器会将表达式视为

var foo = baz.bar(println(foo))

因此foo是递归定义的,并且StringOps.apply方法需要一个Int参数(由于String没有StringOps方法,因此String将隐式转换为apply)。

调用带有一个非Unit参数的方法时,应仅使用类似于语法的运算符,以避免此类歧义。

关于scala - Scala中的 "recursive method <method name> needs type"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3617830/

相关文章:

scala - 如何从 build.sbt 运行主类?

Scala "multilevel"抽象类/抽象对象替换

scala - 如何使用 withColumn 创建新列以将两个数字列集中为 String ?

java - 在反序列化期间将 POJO 映射到具有不可变列表的案例类

Scala 生成列表的排列耗尽内存

scala - Spark : shuffle operation leading to long GC pause

scala - 使用 Jackson 对 Scala 枚举进行 JSON 序列化

scala - Spark 的 RDD.map() 不会执行,除非 RDD 内的项被访问

scala - 如何制作也可以以非尾递归方式引用自身的尾递归方法

scala - 如何调用带有Tuple2的2个参数的函数?