Scala基础知识之函数
来源:互联网 发布:c语言的库函数 编辑:程序博客网 时间:2024/05/22 22:59
Scala基础知识之函数
使用de定义函数 函数名 (参数列表): 返回类型 = {function body }
注意类型Int 必须要首字母大写
变量可以推断返回类型,所以函数也可以省略返回值类型
再次简化, 变成一行
scala> def max(x:Int, y:Int) = if(x>y) x else ymax: (x: Int, y: Int)Intscala> max(2,3)res30: Int = 3scala>
二、部分应用(Partial application), 默认值
scala> def sum(x:Int, y:Int) = x+ysum: (x: Int, y: Int)Intscala> sum(2,3)res31: Int = 5设置第一个参数为默认值scala> val sum2 = sum(2, _:Int)sum2: Int => Int = <function1>scala> sum2(4)res32: Int = 6
2.1、实现
package com.chb.testobject TestFunc { def add(x: Int, y: Int) = x + y //部分应用 def add2 = add(_:Int, 2); /** * 主函数 */ def main(args: Array[String]): Unit = { println(add(2, 3)); //add2只用输入一个参数 println(add2(2)); }}package com.chb.testobject TestFunc { /** * 默认参数 */ def sayMyName(name: String = "jack") { println(name); } /** * 主函数 */ def main(args: Array[String]): Unit = { sayMyName("name"); sayMyName();//输出默认值 }outputs: name jack}
三、递归函数
如果是递归函数,同样需要指定返回类型。如:
scala> def fun(n:Int):Int = if(n<=0) 1 else n*fun(n-1)fun: (n: Int)Intscala> fun(5)res33: Int = 120如果不指定返回值类型scala> def fun(n:Int)= if(n<=0) 1 else n*fun(n-1)<console>:8: error: recursive method fun needs result type def fun(n:Int)= if(n<=0) 1 else n*fun(n-1)scala>##代码package com.chb.testobject TestFunc { //递归函数必须有返回值类型 def fun(n:Int):Int = if(n<=0) 1 else n*fun(n-1) /** * 主函数 */ def main(args: Array[String]): Unit = { println(fun(5)) }}
四、柯里化函数
有时会有这样的需求:允许别人一会在你的函数上应用一些参 数,然后又应用另外的一些参数。 例如一个乘法函数,在一个场景需要选择乘数,而另一个场景 需要选择被乘数
scala> def multiply(m:Int)(n:Int):Int = m*nmultiply: (m: Int)(n: Int)Intscala> multiply(2)(3)res36: Int = 6scala>这个看起来没有什么用处啊,但是我们说柯里化在递归,和控制抽象方面比较有用在目前我们不去深究这个使用场景,现在就是让大家知道有这么个形式,大家掌握到这就可以了柯里化就是把参数可以分开来,把部分函数参数可以用下划线来代替package com.chb.testobject TestFunc { def multiply(m:Int)(n:Int):Int = m*n //第一个参数默认, 第二个参数使用"_"代替 def m2 = multiply(2)_; /** * 主函数 */ def main(args: Array[String]): Unit = { println(m2(3)); }}
4.1、部分应用第二个参数
#第一个参数使用默认3, 第二个参数使用"_"表示scala> val timesTwo = multiply(3)_timesTwo: Int => Int = <function1>scala> timesTwo(3)res37: Int = 9scala> def adder(m: Int, n: Int) = m + nadder: (m: Int, n: Int)Intscala> (adder _).curriedres39: Int => (Int => Int) = <function1>
五、匿名函数,没有名字, 没有返回值类型
##匿名函数没有名字scala> (x:Int, y:Int) => x * yres40: (Int, Int) => Int = <function2>#添加上返回值类型, 会报错的。scala> (x:Int, y:Int):Int => x * y<console>:1: error: not a legal formal parameter (x:Int, y:Int):Int => x * y ^scala>
什么是函数式编程
函数嵌套
def testinclude(a:Int,b:Int)={ def add(a:Int,b:Int)=a+b; add(a,b); }
函数可以赋值给变量
匿名函数scala> (x:Int) => x+1 res43: Int => Int = <function1>函数赋值给变量scala> var inc = (x:Int)=>x+1inc: Int => Int = <function1>scala> inc(10)res44: Int = 11scala>
函数的传递
scala> def test02(callback:() => Unit) = { callback(); }test02: (callback: () => Unit)Unitscala> var t01 = () =>print("fffffffffff")t01: () => Unit = <function0>scala> test02(t01)fffffffffffscala> test02(()=>{})scala> test02(()=>{})
0 0
- Scala基础知识之函数
- Scala基础知识之集合
- Scala基础知识之伴生对象
- Scala基础之函数
- scala学习之函数
- Scala之偏函数
- Scala 基础知识
- Scala基础知识
- Scala基础知识
- Scala 基础知识
- Scala之旅-函数详解
- Scala之主构造函数
- Scala之主构造函数
- Scala之高阶函数
- Scala之高阶函数
- Scala 之 高阶函数
- Scala入门之函数进阶
- Scala入门之函数编程
- 4—IPv6编程windows篇,client篇
- Cannot change version of project facet Dynamic web
- Win64 GTK+3编程【1】dev-cpp…
- maven在eclipse中使用的小技巧总结
- Win64 GTK+3编程【2】GTK+3完…
- Scala基础知识之函数
- rxjava2 retrofit2 配置
- Spring入门学习——bean属性配置(一)
- 4—IPv6编程*.dll、*.a篇,动态和静…
- 安卓权限配置时出现“Permission is only granted to system apps”
- 研究方向----简洁的美
- Spring入门学习——bean属性配置(二)
- OpenGL 通过glViewport实现2d…
- 【leetcode】Two Sum II