本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循 署名-非商业用途-保持一致 的创作共用协议.
2015年最后一天来一发.
从面向对象语言转来学习函数式语言, 疑惑还是非常多的..
return 关键字, 默认的最后执行结果返回 map(映射) 语法(虽然之前在Python中用过类似的) monad 模式匹配是数据结构中字符串的一种基本运算, 给定一个子串, 要求在某个字符串中找出与该子串相同的所有子串, 而在Scala中, 模式匹配可以认为针对各种数据结构进行匹配
最开始我以为模式匹配用来替代其他语言中的Switch语句的, 后来我发现这个认识太浅薄了, 模式匹配远比Switch强大太多
break , 默认是逻辑匹配后自动break case _ 替代其他语言中的 default 语句. 表达式 , 表达式本身是有返回值的! deforiginMatch(name: String) = name match { case"Andrew"=>println("My name is $name") case"Andrewliu"=>println("He name is $name") case"Liu"=>println("helloworld") case_ =>println("Everything") } scala中的 try-catch 语句写起来和其他语言是差不多的, 其中异常的处理可以通过case进行具体的异常匹配,然后执行对应的逻辑
def tryCatch() = { try{ 1/0 } catch { case e: ArithmeticException => println("分母为0") } finally { println("finally") } } try-catch 是面向对象语言的常用形式, 那么更加函数式的异常捕获呢? 使用Try
Try有两个子类型:
Success[A] : 代表成功的计算 Throwable 的 Failure[A] , 代表出错的计算 如果当前处理逻辑可能导致异常, 可以简单使用 Try[A] 作为函数的返回类型
deftryMethod(name: String):Try[String] = { Try { println("My name is $name") throw new IOException("IOException") } match { case Success(result) => Try("hello world") case Failure(e) => println("hello world, This is a IOException"); Try("This is a Exception") } } 此处Success是当Try中逻辑正行执行时执行, 返回为Failure[String], Failure是在Try逻辑中出现异常时, 返回值编程了Failure[String]
在Python中使用isinstance来判断变量的类型, 而且必须要要记住对应的 type , 每次都要查手册才行.
模式匹配来进行变量类型的匹配是极为感人的, 并且可以对匹配的变量进行重新命名, 简直感人.
defpatternMatch(para:Any): Unit = { para match { casei:Intifi <0=> i -1 casei:Int=> i +1 cased:Doubleifd <0.0=> d -0.1 cased:Double=> d +0.1 casetext: String => text +"s" case_ =>println("Any") } }