神奇的_scala
来源:互联网 发布:爱钱进可靠吗 知乎 编辑:程序博客网 时间:2024/06/06 03:49
刚开始学习scala,就被它的难住了。下面我们看看scala中的用法
1. 模式匹配
在scala中,模式匹配有点类似于java中的switch语句。
def matchTest(x: Int): String = x match { case 1 => "one" case 2 => "two" case _ => "anything other than one and two" }
scala中, 是按顺序匹配的, 先匹配的先执行, 上面例子中的就是一个通配符,它会匹配所有的字符。scala还允许嵌套模式。我们来看看 嵌套的例子
expr match { case List(1,_,_) => " a list with three element and the first element is 1" case List(_*) => " a list with zero or more elements " case Map[_,_] => " matches a map with any key type and any value type " case _ => }
TODO: test not working.
2.匿名函数
scala中定义匿名函数非常优雅,_在语法中表示一个占位符。
List(1,2,3,4,5).foreach(print(_))
等价于如下语法, _表示参数
List(1,2,3,4,5).foreach( a => print(a))
我们再举一个两个参数的例子
val sum = List(1,2,3,4,5).reduceLeft(_+_)
val sum = List(1,2,3,4,5).reduceLeft((a, b) => a + b)
3.import
在导入包时,_的作用和java中的*是一样的。
// imports all the classes in the package matchingimport scala.util.matching._// imports all the members of the object Fun. (static import in java)import com.test.Fun._// imports all the members of the object Fun but renames Foo to Barimport com.test.Fun.{ Foo => Bar , _ }// imports all the members except Foo. To exclude a member rename it to _import com.test.Fun.{ Foo => _ , _ }
4.properties
在scala中, 一个对象可以隐式定义非私有变量, getter和变量名相同,_=和setter相当
class Test { private var a = 0 def age = a def age_=(n:Int) = { require(n>0) a = n }}
val t = new Testt.age = 5println(t.age)
5.函数
scala是一种函数语言,我们可以把函数当做普通的变量,如果你给变量赋值为一个函数,那么会调用函数,并将结果赋值给这个变量。我们应该在函数后加上 _ 调用函数给变量赋值, 减少括号的混淆。
class Test { def fun = { // some code } val funLike = fun _}
6.参考
http://ananthakumaran.in/2010/03/29/scala-underscore-magic.html
0 0
- 神奇的_scala
- 01_Scala基础语法
- 3.2_Scala templates common use cases
- 神奇的的调色板
- 神奇的*号
- 一组神奇的图片
- 神奇的一天
- 神奇的预言
- 神奇的jsfl!
- 神奇的VIM
- 神奇的猴子Mono
- 神奇的xx宏
- 神奇的视觉艺术
- 神奇的上班路上
- 神奇的视觉艺术
- 神奇的 DataGrid
- 神奇的食物
- 神奇的 DataGrid
- LINUX 文件I/O
- 连接MySQL数据库时常见故障问题的分析与解决
- mycncart使用教程 - 修改管理员操作权限
- HDU 1010 Tempter of the Bone
- SQL总结.1
- 神奇的_scala
- 源码探索系列15---那个AsyncTask里面的FutureTask
- iOS同步对象性能对比(iOS锁性能对比)
- nginx基于cookie粘滞做的负载均衡
- [每天程序猿] 如何成为顶级技术巨匠?
- tinyos学习笔记8--TestLinkLocal例程代码说明
- mysql user权限表
- 生产者消费者模式浅析
- mycncart如何开启短信验证接口功能