繁体   English   中英

Scala-函数的隐式返回类型

[英]Scala - Function's implicit return type

我是scala的新手,对函数定义和默认返回类型有些疑问。

这是一个函数定义:

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

提示说是:

wol:(s:String)Int

但是,代码没有明确指定返回类型,因此不应将其默认为Unit ,这在Java中意味着void

那么,Scala函数的默认返回类型的规则是什么?

函数中的返回类型实际上是函数中最后一个表达式的返回类型。 在这种情况下,它是一个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 }

无论如何,作为最佳实践,请尝试避免使用此语法,并始终选择放置=符号。 此外,如果定义公共方法,请尝试始终指定返回类型。

希望有帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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