我是scala的新手,对功能定义和功能有一点怀疑。默认返回类型。
这是一个函数定义:
def wol(s: String) = s.length.toString.length
提示说:
wol:(s:String)Int
但是,代码没有明确指定返回类型,不应该默认为Unit
,这意味着Java中的void
。
那么,Scala函数的默认返回类型的规则是什么?
答案 0 :(得分:5)
函数中的返回类型实际上是函数中出现的最后一个表达式的返回类型。在这种情况下,它是Int
,因为#length
会返回一个Int。
这是编译器在尝试推断类型时所做的工作。如果您没有指定类型,则会自动推断,但不一定是Unit
。你可以强迫它说明它:
def wol(s: String): Unit = s.length.toString.length
编辑[语法糖样本]
我只记得可能与你以前的信仰有关的事情。当您定义方法而未指定其返回类型且未放置=
符号时,编译器将强制返回类型为Unit。
def wol(s: String) {
s.length.toString.length
}
val x = wol("") // x has type Unit!
IntelliJ实际上警告你并给出提示Useless expression
。在场景后面,此处的#wol
功能转换为:
// This is actually the same as the first function
def wol(s: String): Unit = { s.length.toString.length }
无论如何,作为最佳做法,请尽量避免使用此语法,并始终选择放置=
符号。此外,如果您定义公共方法,请尝试始终指定返回类型。
希望有所帮助:)