加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala中的“递归方法需要类型”是什么意思?

发布时间:2020-12-16 09:56:17 所属栏目:安全 来源:网络整理
导读:当我尝试从方法调用中省略点时,例如在此示例程序中: object Test extends Application { val baz = new Baz var foo = baz bar println(foo)}class Baz { def bar = "bar"} 我得到了奇怪的错误.第一个是错误:递归方法foo需要类型:println foo而另一个是错
当我尝试从方法调用中省略点时,例如在此示例程序中:

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

class Baz {
  def bar = "bar"
}

我得到了奇怪的错误.第一个是错误:递归方法foo需要类型:println foo而另一个是错误:类型不匹配;找到:单位,必需:Int,println(foo).如果我指定foo的类型应该是String,则第一个错误以某种奇怪的方式修复.在我在baz和bar之间放一个点之前,第二个不会消失.这是什么原因?为什么Scala认为baz bar是一种递归方法?

解决方法

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

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

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

在调用带有一个非Unit参数的方法时,您应该只使用类似于运算符的语法来避免这种歧义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读