隐式转换函数:

object test2 {def main(args:Array[String]):Unit= {repeat("abc",3)//把abc重复3次,然后打印出来
//     repeat(123,3)//把abc重复3次,然后打印出来reverse("htt")//自动翻转
//     reverse(123)//自动翻转}//隐式转换函数def repeat(str:String,n:Int):String={var i=0val sb=new StringBuffer(str.length*n)while(i<n){sb.append(str)i+=1}sb.toString}//我们自己定义一个函数implicit def int2String(i:Int) = i.toString;implicit def int2String(i:Float) = i.toString;implicit def int2String(i:Double) = i.toString;//关键字implicit就是隐式的意思//以上的函数只支持传进去一个String和int,但是当你传进去int和int是他就会报错,但是当你添加了implicat的关键字定义int转换String,那么他就会全局自动转换//字符串翻转def reverse(s:String)={s.reverse}//隐式必须在当前作用域的范围之内
}

部分应用函数:

object test3 {def main(args:Array[String]):Unit= {deg(1);//返回值是6 ,只传入a的值deg(10);//返回15 ,只传入a的值}//常规方法def sum(a:Int,b:Int)={a+b}def sum(a:Int,b:Int,c:Int)={a+b+c}//他是一个函数,表示传入一个int类型,放回去一个int类型,sum方法的之传入一个参数,另外一个参数没有使用,没有定义def deg :Int=>Int=sum(_,5)val add=(c:Int) => sum(5,12,c)
}

咖喱函数:

object test4 {def main(args:Array[String]):Unit= {add5(10)//返回去15}//咖喱华函数,一个函数带有俩个参数列表def sum(a:Int)(b:Int)={a+b}//_表示把sum(5)生成的值传递出去val add5=sum(5) _//真真意义上的定义def gas(a:Int,b:Int)={a+b}//可以把上面的函数参数离散化val curried=(gas _).curried//代码咖喱华的作用//分离参数
}

部分函数和分段函数

class test5 {def main(args:Array[String]):Unit= {f(3,3.0)//返回值6.0}//部分函数和分段函数val f=new Function2[Int,Double,Double] {def apply(a:Int,b:Double):Double=a+b}//这是一个函数对象//部分函数对象val fraction = new PartialFunction[Int,Int] {def apply(d:Int)=42/ddef isDefinedAt(d: Int)=d!=0//检测函数是否有效,有效就调用,无效就不调用}//有一些函数可以接受一些参数def fprint(p:PartialFunction[Int,Int])(a:Int)={if(p.isDefinedAt(a)){println(p(a))}else{println(s"$a is invalid")}}
}

高阶函数

object test6 {def main(args:Array[String]):Unit= {safeStringop("abc",reverse)safeStringop("abc",upper)}//高级函数def safeStringop(s:String,f:String => String)={if(s!=null) f(s) else s}//翻转def reverse(s:String)={s.reverse}//变成大写def upper(f:String)={f.toUpperCase}
}

递归和尾递归


object test7 {def main(args:Array[String]):Unit= {}def whileLoop(cond: => Boolean)(body: =>Unit):Unit=if(cond){bodywhileLoop(cond)(body)}var i=10;whileLoop(i>0){println("aa"+i)i-=1}class LoopUlessCond(body: =>Unit){def unless(cond: =>Boolean)={bodyif(!cond) unless (cond)}}var j=0;loop{println("aa"+j)j-=1}unless(j==0)//递归不断压窄,不断出窄def fab(n:Int):Int=if(n==0 || n==1) 1 else fab(n-1)+fab(n-2)//def fac(n:Int):Int=if(n==0) 1 else n*fac(n-1)//def fac(n:Int,accu:Int):Int=if(n<=1) accu else fac(i-1,i*accu)//尾递归@tailrecdef whileLoop(cond: => Boolean)(body: =>Unit):Unit=if(cond){bodywhileLoop(cond)(body)}class LoopUlessCond(body: =>Unit){@tailrecfinal def unless(cond: =>Boolean)={bodyif(!cond) unless (cond)}}
}

scala的函数(day02)相关推荐

  1. scala 字符串函数_Scala中的字符串chomp(或chop)函数

    scala 字符串函数 剁或剁弦 (Chop or Chomp string) It is used to chop off the end of line characters. For this ...

  2. Scala基础 - 函数和方法的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1. 函数和方法 在Scala中函数是一等公民,你可以像操作数字一样将函数赋值给一个变量.使用val语句可以定义函数,def语 ...

  3. Scala:函数与匿名函数

    Scala:函数与匿名函数 函数是第一等公民 函数类型 高阶函数 匿名函数 函数是第一等公民 在scala中,函数是第一等公民 Scala中,函数和变量有同等的位置,或者说函数也是一种变量. Scal ...

  4. Scala定义函数的5种方式

    大数据spark的源码是用scala来开发的,因此学习scala来开发spark会更加便捷. Scala中第一函数的接种方式如下: 规范化写法,scala函数的返回值是最后一行代码 Unit是scal ...

  5. scala 函数中嵌套函数_如何在Scala中将函数转换为部分函数?

    scala 函数中嵌套函数 First, let's see what is a function and a partial function, and then we will see their ...

  6. scala定义函数(六)

    大数据spark的源码是用Scala来开发的,因此学习Scala来开发spark会更加便捷. scala中第一函数的集中方式如下: 1.规范化写法,scala 函数的返回值是最后一行代码: def a ...

  7. scala的函数化编程

    映射Map-构建Map 构造不可变映射 val map1=Map("Alice"->10,"Bob"->20,"Kotlin"- ...

  8. scala 基础 —— 函数(柯里化)

    与 Java/c++ 不同的是,scala 并未提供 ++ 和 – 操作符: 不带参数的 scala 方法通常不使用圆括号: scala> "hello".distinct ...

  9. 深入浅出scala之函数(匿名函数)(P41-45)

    文章目录 1.函数的定义 2.匿名函数 3.递归函数 4.无参函数 5.方法和函数的区别联系 1.函数的定义 package MethodDemoobject FunctionDefinition { ...

最新文章

  1. Redis初学17:集群
  2. 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。
  3. UIScrollView 的代理方法简单注解
  4. 【mysql技巧】按某一字段分组取最大(小)值所在行的数据
  5. 《系统集成项目管理工程师》必背100个知识点-33常见的工作分解结构表现形式...
  6. 动态规划经典算法--最长公共子序列 LCS
  7. IdentityServer4-MVC+Hybrid实现Claims授权验证(四)
  8. 中西方对时间的差异_中西方时间观念差异 英文
  9. mysql.sys用户权限_MySQL用户及权限小结
  10. tensorflow随笔——concat(), stack(), unstack()
  11. mysql数据库关联查询慢_mysql数据库多表关联查询的慢SQL优化
  12. linux如何远程装java_使用Shell远程给Linux安装JDK
  13. 用pe修复服务器系统,如何用PE修复系统
  14. 四元式的翻译以及寄存器分配
  15. 如何把网站程序文件快速上传到服务器空间经历分享
  16. 【0CTF/TCTF2021预选】[Misc] pypypypy Sloth writeup python字节码编程
  17. 基于JAVA的葫芦娃救爷爷游戏
  18. CSS代码缩写,占用更少的带宽/字体缩写/盒模型代码简写/颜色值缩写
  19. Python课程入门之Pycharm创建PY文件的使用步骤与模板创建
  20. 对于服务治理概念的一些总结和理解,我们应该如何实践服务治理

热门文章

  1. bootstrap datetimepicker 复选可删除,可规定指定日期不可选
  2. 【VS开发】VS2010中导入ActiveX控件
  3. 【Python】setup-转载
  4. [Flex]Flex 3.0 and Adobe AIR 1.0正式版发布!
  5. vscode终端无法识别node
  6. 用字典存储学生成绩查询_C语言 | 用结构体变量存储学生信息
  7. 拦截器和过滤器区别_新手能看懂的(Interceptor)和(Filter)区别与使用!
  8. jmail mysql_利用VB+jmail发送邮件源码
  9. suse linux vnc 桌面号,在SUSE Linux下安装VNC的方法
  10. 电商C4D素材,玩转立体作品不是问题