scala函数,柯里化函数

Posted Leo Han

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala函数,柯里化函数相关的知识,希望对你有一定的参考价值。

scala中函数没有重载的概念,函数名称唯一,不区分参数,
scala是完全面向对象,也是完全面向函数

根据函数的最后一行推断返回类型:

def test():String=
print(1111)
"Hello world"

这时候可以省略返回类型
如果函数体只有一行代码,大括号可以省略

def test():String = "Hello word "

如果函数的声明没有参数列表,小括号可以省略:

def test = "Hello World"

但是这样访问的时候不能增加小括号,只能用 test访问 (统一访问方式)
如果加上()调用的时候可以用 test() 或者 test
方法不加 = 的时候,表示函数没有返回值(与unit不同)

def test ()
"Hello world"

或者

def test 
"Hello world"

调用的时候必须用 test
编译器不会把最后一行返回,明确没有返回值

可变参数:

def test(name :String*):Unit=

可传人一个

默认参数:

def test(name:String ,age:Int=20):Unit=

scla中函数可以赋值给变量,可以作为函数的参数,可以作为函数的返回值

def f():Unit=
println("Hello world")


def f0=
// f 这样写的话会有问题, 无参的函数这种是默认调用,写成如下格式
f _ //增加特殊符号 _ 下划线

可以写成如下格式: 柯里化函数可以这么写:

def f1(i:Int)								def f(i:Int)(j:Int):Int=
def f0(j:Int):Unit=							i*j
i*j								   
									 	print(f(2)(3))
f _

println(fo(2)(3))

函数闭包

一个函数在实现逻辑时,将外部变量引入到函数内容,改变了这个变量的生命周期,
将函数作为参数传递给另外一个函数,采用特殊的声明, ()=>Unit 参数列表=>返回值类型

val f:(Int)=>Int = f1(10)
def f4(f:()=>Int):Int=
f()+10

def f5():Int=
5

匿名函数:

def f6(f:(Int)=>Unit):Unit
f(10)

f6(
(i:Int )=>println(s"Hello world $i"
)

i可以推导,可以类型类型:

f6(
(i )=>println(s"Hello world $i")
)
f6(
(i )=>println(s"Hello world $i")
)

只有一个参数只使用一次的时候,可以省略如下:

f6(
println(_)
)

还可以省略如下:

f6(
println
)

def f7(f:(Int,Int)=>Int):Int
f(10,10)

println(f7((x:Int,y:Int)=>x+y)
println(f7((x,y)=>x+y)
println(f7((x,y)=>x+y)
println(f7(_+_)   //注意这里下划线是表示这两个参数只使用了一次,第一个_表示x,第二个 _ 表示y

def f1="hello world" 是一个函数,相当于:

def f1():String=
"hello world"

参数类型推断

参数推断省去类型信息,参数类型是可以推断出来的,也可以进行相应的简写,相应规则如下

  • 参数类型可以推断时,省略参数类型
  • 传入的函数只有单个参数时,可以省去括号
  • 如果变量只在 => 右边出现一次,可以用 _ 代替

函数如果参数只有一行,且有且只有一个参数并且只是用一遍的时候可以省略

list.foreach((i:Int)=>println(i))
list.foreach((i)=>println(i))
list.foreach(println(_))
list.foreach(println(_))
list.foreach(println)

函数柯里话

在函数编程中,接收多个参数的函数都可以转换为接收单个参数的函数,这个转换过程称为柯里化

 def add(x: Int, y: Int) = x + y

def addCurry(x: Int)(y: Int) = x + y

以上是关于scala函数,柯里化函数的主要内容,如果未能解决你的问题,请参考以下文章

Scala函数柯里化(Currying or Curry)

Scala的柯里化和函数的部分施用

Scala函数柯里化(Currying)

Scala函数柯里化(Currying)

Scala函数柯里化(Currying)

Scala函数柯里化(Currying)