博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scala学习手记20 - 方法返回类型推断
阅读量:6864 次
发布时间:2019-06-26

本文共 1071 字,大约阅读时间需要 3 分钟。

除了推演变量的类型,scala也会推演方法的返回类型。不过这里有一处需要注意:方法返回类型的推演依赖于方法的定义方式。如果用等号“=”定义方法,scala就会推演方法返回类型;否则,它就认为方法的返回为void。看一个例子:

def printMethodInfo(methodName: String) {  println("The return type of " + methodName + " is "      + getClass().getDeclaredMethod(methodName).getReturnType().getName())//此处教材中的代码存在问题,去掉了getDeclaredMethod调用的中第二个参数null}def method1() { 6 }def method2() = { 6 }def method3() = 6def method4: Double = 6printMethodInfo("method1")printMethodInfo("method2")printMethodInfo("method3")printMethodInfo("method4")

其中方法一是按照习惯方式定义的,方法二则是使用等号定义的。两个方法都很简单,二者唯一的差别就是定义时有没有使用等号。这一点差别决定了scala是否会对方法的返回类型进行推演。看一下上面代码的执行结果:

代码执行结果和预期一致(请忽略前几行的警告)。

如果方法体很简单,可以写成一个表达式,那么环绕方法体的花括号就可以去掉,就像方法三一样。还有前面应该也提到过,如果方法没有参数的话,括号也是可以省略掉的,这就是方法四的定义方式。

此外,还可以显式声明类型。这里将方法四的返回值声明为Double。虽然实际上方法四的返回值是一个Int值,不过只要返回值与声明的返回类型兼容就好,因此也可以将方法四的返回类型声明为为Unit、Short、Long、Float等等。如果声明的返回类型与实际返回值不兼容的话,scala就会报出一个类型不匹配的编译时错误。

方法返回类型推断还和之前提到的关于return的用法有些关联:如果没有写return关键字,方法调用会自动返回最后一个求值的表达式。

总的来说,使用=,让Scala推演方法的类型会好一些。这样可以少担心一件事,让构建良好的类型推演为我们服务。

#######

转载于:https://www.cnblogs.com/amunote/p/5617161.html

你可能感兴趣的文章
jquery mobile的a标签点击无法跳转的问题
查看>>
PLSQL创建Oracle定时任务
查看>>
GAN与NLP的讨论
查看>>
在linux上面合并多个windows文件乱码的问题
查看>>
Django Template(模板系统)
查看>>
2、Python基础--除法、常用数学函数
查看>>
js插件---10个免费开源的JS音乐播放器插件
查看>>
ps如何批量处理图片
查看>>
m_Orchestrate learning system---十三、thinkphp的验证器支持多语言么
查看>>
C++排序
查看>>
jQuery.特效
查看>>
Openstack组件部署 — Overview和前期环境准备
查看>>
SQL server数据库系统部分常用的存储过程及说明
查看>>
系统内存信息获取工具类
查看>>
数据结构之链表、栈和队列 java代码实现
查看>>
Android基于IIS的APK下载(五)IIS的配置
查看>>
Ext 整合 Jquery
查看>>
php.ini
查看>>
Go Web
查看>>
你为什么有那么多时间写博客?
查看>>