[原创]Scala学习:函数的定义
方式一:标准的定义函数
def 函数名(参数1: 参数类型,参数2: 参数类型): 返回值类型 = {
函数体
}
例子
def max(x: Int,y: Int): Int ={
if(x > y) x
else y
}
注意:参数列表中必须标注好参数类型,因为scala编译器无法推断参数的类型
方式二:在一般的情况下可以省略,函数返回值的类型
def 函数名(参数1: 参数类型,参数2: 参数类型) = {
函数体
}
def max(x: Int,y: Int) = {
if(x > y) x
else y
}
或者 将大括号也可以省略
def max(x: Int,y: Int) = if(x > y) x else y
注意:scala中,在函数递归的时候,必须指明返回值的类型;其他框架或者系统,可以不用指明函数的返回值
方式三:既不带参数也不带返回值有用结果的定义函数
scala> def greet() = println("hello world")
greet: ()Unit
Unit是函数greet的记过类型,指的是函数没有有效的返回值,scala中的Unit类型比较于java中的viod类型,而实际上java中返回void的方法都会被映射为返回Unit的scala方法
结果类型为Unit的方法,并非是为了得到返回值,而是为了其他的运行效果(side effect)
匿名函数:函数常见的 形式,关注于函数的计算。分析:因为函数是有值的,所以我们将函数赋值给一个常量
val add = (x: Int) => x+100 // 声明匿名函数
println(add(2)) //调用匿名函数
可变参数的函数定义:* 表示
def con(args: Int*) = {
var result = 0
for(arg <- args) result += arg
result
}
println("result" + con(1,2,3,4))
注意:
1)函数是有值的,所以函数可以作为另外一个函数的参数
[原创]Scala学习:函数的定义的更多相关文章
- Scala学习——函数
一.函数的定义(def) object FunctionApp { //定义函数:方法体内最后一行为返回值,不需要使用return def add(a:Int,b:Int):Int={ a + b } ...
- [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组
1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...
- [原创]Scala学习:for,function,lazy
1.for循环是一个循环控制结构,可以有效地编写需要执行的特定次数的循环.Scalar的循环说明如下的各种形式: 1)Scala中for循环最简单的语法是: for( var x <- Rang ...
- [原创]Scala学习:Tuple,Array,Map ,文件操作
1.Tuple:元祖.是一个有用的容器对象. 1)特点: ① 元祖是不可变的,即,当声明完了一个元祖,那么它的长度就不可以在改变: ② 元祖可以包含不同类型的数据,对象: ③ 索引是从 '_1 ...
- [原创]Scala学习:关于变量(val,var,类型推断)
1.常量定义: val val 类似于java中的final变量.一旦初始化了,val就不能再被赋值 val megs = "hello world" 2.变量的定义: var ...
- Scala学习——函数高级操作
scala函数高级操作 一.字符串高级操作 多行字符串和插值 package top.ruandb.scala.Course06 object StringApp { def main(args: A ...
- scala 学习笔记九 定义操作符
Scala中方法名可以包含几乎所有字符,还可以对操作符+赋予新的含义 上面例子中136行,用下划线来表示“缺省初始化值” 上面151行和153行都是通过圆点表示法进行调用 157行和159行用中缀表示 ...
- [原创]Scala学习:流程控制,异常处理
1.流程控制 1)do..while def doWhile(){ var line="" do{ line = readLine() println("readline ...
- [原创]Scala学习:编写Scala脚本
scala支持脚本 1)在/opt/scala-script下创建一个文件hello.scala 编辑内容如下: $ hello ,this is the first scala script 2)运 ...
随机推荐
- Redis与Reactor模式
Redis与Reactor模式 Jan 9, 2016 近期看了Redis的设计与实现,这本书写的还不错,看完后对Redis的理解有非常大的帮助. 另外,作者整理了一份Redis源代码凝视,大家能够c ...
- adb pull adb push
adb pull:数据从真机到计算机 adb push: 数据从计算机到真机 使用方法: 在android开发环境的sdk--platform tools中安装了adb,在该目录下运行“adb pul ...
- c#关于int(或其他类型)的字段在对象初始化时默认初始化问题的解决方法
问题: c#的wcf服务接口在后台通过自定义对象接收前台参数的时候,前台参数即使不传int类型的字段值,后台也会默认初始化为0,由于很多表示状态的int字段都是从0开始的,导致查询的时候有些不想参与查 ...
- 转 拉姆达表达式,委托、匿名方法、Lambda表达式的演进
总结:Lambda表达式的语法:(参数列表=>执行语句) 无参数格式 :()=>{执行语句} 有参数格式:x=> x % 2 == 0 1.假设给我们一个泛型对象List<T& ...
- java游戏开发基础Swing之JRadioButton
© 版权声明:本文为博主原创文章,转载请注明出处 1.按钮(JButton) Swing中的按钮是JButton,它是javax.swing.AbstractButton类的子类,Swing中的按钮可 ...
- EularProject 39:给周长推断构成直角三角形个数
华电北风吹 天津大学认知计算与应用重点实验室 完毕日期:2015/7/30 Integer right triangles Problem 39 If p is the perimeter of a ...
- js中box和box()的区别
window.onload = function(){ var input = document.getElementByTagName('input')[0]; input.onclick = bo ...
- Python学习笔记(一)三步走安装pip
pip是用来方便地管理Python的第三方包的,由于此前玩Python仅仅是浅尝辄止,用的是python(x,y),但是这里并不代表你想用什么包都能从里面找到的,所以我把python(x,y)卸了,然 ...
- oracle查看表占用磁盘空间
SELECT T.OWNER, T.SEGMENT_NAME, SUM(T.BYTES) / 1024 / 1024 M FROM DBA_SEGMENTS T WHERE T.OWNER = 'u ...
- Redis学习笔记-Redis内部数据结构
Redis内部数据结构 Redis和其他key-value数据库的很大区别是它支持非字符串类型的value值.它支持的value值的类型如下: sds (simple dynamic string) ...