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参数的方法时,您应该只使用类似于运算符的语法来避免这种歧义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |