简体   繁体   中英

Scala - Function's implicit return type

I am new to scala, and got a little doubt about function definition & default return type.

Here is a function definition:

def wol(s: String) = s.length.toString.length

The prompt says it's:

wol: (s: String)Int

But, the code didn't specify return type explicitly, shouldn't it default to Unit , which means void in Java.

So, what is the rules for default return type of a Scala function?

The return type in a function is actually the return type of the last expression that occurs in the function. In this case it's an Int , because #length returns an Int.

This is the work done by the compiler when it tries to infer the type. If you don't specify a type, it automatically gets inferred, but it's not necessarily Unit . You could force it to be that be stating it:

def wol(s: String): Unit = s.length.toString.length

EDIT [syntactic sugar sample]

I just remembered something that might be connected to your previous beliefs. When you define a method without specifying its return type and without putting the = sign, the compiler will force the return type to be Unit.

def wol(s: String) {
  s.length.toString.length
}

val x = wol("") // x has type Unit!

IntelliJ actually warns you and gives the hint Useless expression . Behind the scene, the #wol function here is converted into something like:

// This is actually the same as the first function
def wol(s: String): Unit = { s.length.toString.length }

Anyway, as a best practice try to avoid using this syntax and always opt for putting that = sign. Furthermore if you define public methods try to always specify the return type.

Hope that helps :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM