六 scala函数与方法

1.定义方法

  1. 带参不带返回值
scala> def main(args: Array[String]) :Unit = {println(args.length)}
main: (args: Array[String])Unit
scala> main(Array("a","b"))
2
scala>

使用Unit其实也有返回值,只不过返回值为空:Unit的实例:()

  1. 带参带返回值
    方法的返回值类型可以不写,编译器可以推断出来,但是对于递归函数,必须指定返回类型
scala> def add(x: Int) : Int = x + 1
add: (x: Int)Int
scala> add(1)
2
scala>
  1. 无参无返回值
scala> def sayHello() :Unit = {println("hello")}
sayHello: ()Unit
scala> sayHello()
hello
scala>

2.定义函数

  1. 函数的定义,在scala中,函数也是一个对象,可以用一个变量来引用
scala> var fun = (x: Int) => x * 10
fun: Int => Int = <function1>

function1:表示fun这个变量的类型是function,而且是一个参数的函数

  1. 函数的调用
scala> fun(3)
res: Int = 30
  1. 匿名函数
scala> (x: Int, y: Int) => x + y
res29: (Int, Int) => Int = <function2>
scala> res29(2,6)
res30: Int = 8
  1. scala的函数与方法的区别
  • 函数包含 =>,方法的定义使用:def
  • 函数是可以作为参数传入方法里面的的,而方法是不可以作为参数的
  • eg:arr数组调用map方法,传入(x: Int) => x10匿名函数将数组中的每个元素执行10操作
scala> val arr = Array(1,2,3,4,5)
arr: Array[Int] = Array(1,2,3,4,5)
scala> arr.map((x: Int) => x*10)
res31: Array[Int] = Array(10,20,30,40,50)
scala> arr.map(x => x*10)
res32: Array[Int] = Array(10,20,30,40,50)
scala> arr.map(_*10)
res33: Array[Int] = Array(10,20,30,40,50)
  • 函数的变体
scala> var f: Int => Int = {x => x * x}
f: Int => Int = <funtion1>

解析: 定义一个函数f,接受一个int类型的参数,返回值为int。 函数的实现为{x => x*x}

3.将方法转换成函数

定义一个函数myFun,参数为一个方法(f: Int => Int)Unit,传入方法f0.

scala> def myFun(f: Int => Int){
            printfln(f(100))
        }
myFun: (f: Int => Int)Unit

scala> val f0 = (x: Int) => x*x
f0: Int => Int = <function1>

scala> myFun(f0)
10000

在定义一个方法f1.不能把一个方法当做参数传入另外一个方法,只能把一个方法的方法名当做参数,传入到另外一个方法中,如果在一个方法中传入方法名,会将方法名转换成一个函数

scala> def f1(x: Int) = x*x
f1: (x:Int)Int

scala> f1(4)
res34: Int = 16

scala> myFun(f1(4))
<console>:11: error: type mismatch;
found    :Int
required :Int => Int

scala> myFun(f1)
10000

scala> f1 _
res35: Int => Int = <function1>

scala> myFun(f1 _)
10000

scala> myFun(x => f1(x))
10000
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 学习列表: scala官方文档[http://scala-lang.org/documentation/] sca...
    sleep_NULL阅读 5,548评论 1 23
  • 数组是一种可变的、可索引的数据集合。在Scala中用Array[T]的形式来表示Java中的数组形式 T[]。 v...
    时待吾阅读 1,070评论 0 0
  • FP 3.1.函数 函数的地位和一般的变量是同等的,可以作为函数的参数,可以作为返回值。传入函数的任何输入是只读的...
    时待吾阅读 1,157评论 0 2
  • scala文档 包含内容 1基础 2控制结构和函数 3数组相关操作 4映射和元组 5类 6对象 7.包和引入(x)...
    zlcook阅读 1,059评论 0 3
  • 遇忘而安,一世无劫;贪恋浮华,轮回枉顾!望川开尽彼岸落,方知三生刻谁名。莫问相付心何安,古风痴道倾城决。三尺红尘,...
    浮生幻尘阅读 271评论 0 4

友情链接更多精彩内容