/**
* 1. case class与模式匹配
*/
object TestFunction extends App{
def value(expr:Expr): Int = expr match {
case FibonaciExpr(0) => 0
case FibonaciExpr(1) => 1
case FibonaciExpr(n) => value(SumExpr(FibonaciExpr(n-1),FibonaciExpr(n-2)))
case SumExpr(a,b) => value(a) + value(b)
case _ => 0
} println(value(FibonaciExpr(3)))
} abstract class Expr
case class FibonaciExpr(n:Int) extends Expr{
require(n >= 0) //PreDef中的方法,用于参数校验
} case class SumExpr(a:Expr,b:Expr) extends Expr /**
* 2. scala中函数对代码的简化
*/
object TestFun2 extends App{
val list = List(1,2,3,4,5,6)
println("list包含基数吗:"+list.exists(_ %2 ==1 )) val fileName = List("warn 2013 msg", "warn 2012 msg","error 2013 msg", "warn 2013 msgs")
println("cat file | grep 'warn' | grep '2013' | wc : "+fileName.filter(_.contains("warn")).filter(_.contains("2013")))
} /**
* 3. scala的wordcount
*/
object TestWordCount extends App{
val file = List("warn 2013 msg", "warn 2012 msg","error 2013 msg", "warn 2013 msg")
def countInStr(str:String):Int = str.split(" ").count("msg"==_)
val num = file.map(countInStr).reduceLeft(_ + _)
println(num)
} /**
* 4. 尾递归 : 函数的最后一步返回函数本身,没有其他的操作
* foldLeft的尾递归实现
*/
object TestTailRec extends App{
val file = List("warn 2013 msg", "warn 2012 msg","msg 2013 msg", "warn 2013 msg")
def countInStr(str:String):Int = str.split(" ").count("msg"==_)
println(file.map(countInStr)) //List(1, 1, 2, 1)
def foldLeft(list:List[Int])(init:Int)(f:(Int,Int) =>Int) :Int = {
list match {
case List() => init
case head::tail => foldLeft(tail)(f(head,init))(f)
}
}
println(foldLeft(file.map(countInStr))(0)(_+_)) // 1+1+2+1 = 5 [科里化]
} /**
* 5. 生成List的for循环
*/
object TestFor2List extends App{
val file = List("warn 2013 msg", "warn 2012 msg","msg 2013 msg", "warn 2013 msg")
def countInStr(str:String):Int = str.split(" ").count("msg"==_)
val counts = for(str <- file) yield countInStr(str)
val num = counts.reduceLeft(_+_)
println(num)
} /**
* 6. Option类型
*/
object TestOption extends App{
def getProperty(param:String): Option[String] ={
val value = System.getProperty(param)
value match {
case null => None
case _ => Some(value)
}
} val osName = getProperty("os.name") println(osName.getOrElse("none")) //1. Option类型的getOrElse方法
osName.foreach(println(_)) // 2. Some类型的值可以作为长度为1的List处理
osName match { //3. Option支持类型匹配
case Some(value) => println(value)
case _ => println("null")
}
}

最新文章

  1. 从客户端(?)中检测到有潜在危险的 Request.Path 值 的解决方案
  2. NOIP2013 花匠
  3. sublime Text2 2.0.2 build 2221 64位 破解(已测试)
  4. 企业应用架构模式阅读笔记 - Martin Fowler
  5. glog使用
  6. web前端之 HTML标签详细介绍
  7. python运维开发(十六)----Dom&amp;&amp;jQuery
  8. [pip]upgrade outdated pip package on windows / 在windows上更新所有过时的pip包
  9. IIS中报错弹出调试,系统日志-错误应用程序名称: w3wp.exe,版本: 8.5.9600.16384,时间戳: 0x5215df96(360主机卫士)
  10. windows服务器nginx+php启动开源ecshop
  11. 弹出层-layui
  12. P3378 堆の模板
  13. CentOS6.5升级GCC4.8
  14. System.Web.HttpException (0x80004005): 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 &lt;machineKey&gt; 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
  15. Strom的trident小例子
  16. 冲刺Two之站立会议2
  17. java AES加密、解密(兼容windows和linux)
  18. vue之生命周期的一点总结
  19. 前端中this的用法
  20. go加密算法:非对称加密(二)--Hash

热门文章

  1. Codeforces Round #190 (Div. 2) B. Ciel and Flowers
  2. C专家编程学习 1
  3. 转:Struts标签checkbox使用总结(默认选择设置)
  4. TCP通讯程序设计---5
  5. activiti工作流数据库表详细介绍 (23张表)
  6. ✡ leetcode 156. Binary Tree Upside Down 旋转树 --------- java
  7. [HAOI2012]音量调节
  8. IOS中如何获取手机的当前IP
  9. Git-rebase与merge小结
  10. EDIUS分别输出视频和音频的教程