首页 > 代码库 > Scala基础
Scala基础
REPL
在Scala中的书籍中会提及REPL,REPL(Read-Eval-Print Loop);这被称为“读取-求值-打印”循环。
不带参数的Scala方法通常不使用圆括号,例如,StringOps类的API显示它有一个distinct方法,不带(),其作用是获取字符串中不重复的字符。调用如下: print("hello".distinct);
Scaladoc
阅读Scaladoc的一些小窍门:
- 如果想使用数值类型,记得看看RichInt、RichDouble等,如果想使用字符串,记得看看StringOps
- 那些数学函数位于scala.math包中,而不是位于某个类中
- 标记为implicit的方法对应的是自动(隐式)转换
- 方法可以以函数作为参数
语句块
注意:在Scala中,表达式(如3+4)和语句(如if-else语句)一样都有值,几乎所有构造出来的语法结构都有值。
在Scala中,{ }块包含一系列表达式,其结果也是一系列表达式。块中最后一个表达式的值就是块的值。赋值动作本身是没有值的,它们的值是Unit类型,而这个类型只有一个值就是()。比如:{r = r * n; n -= 1}的值是Unit类型的。
for循环
for(i <- 表达式),让变量i遍历<-右边的表达式的所有值,在for循环的变量之前并没有val或var的指定,该变量的类型是集合的元素类型,循环变量的作用域一直持续到循环结束。遍历字符串或数组时,你通常需要从0到n-1的区间,这个时候可以使用until方法而不是to方法,until返回一个并不包含上限的区间。
说明:在Scala中,并没有提供break和continue语句退出循环,如果需要break时,可以使用Breaks对象中的break方法。还可以使用变量表达式的形式提供多个生成器,用分号将它们隔开,例如:
for (i <- 1 to 3; j <- 1 to 3) { print(10 * i + j + " ") } //打印结果:11 12 13 21 22 23 31 32 33 |
函数
Scala除了方法外还支持函数,方法对对象进行操作,函数不是。函数: def abs(x: Double) = if (x > 0) 1 else 0;只要函数不是递归的,你就不需要指定返回类型,若是递归函数,必须指定返回类型,如def fac(n:Int):Int = if (n<=0) 1 else fac(n-1)*n;。
过程
Scala对于不返回值的函数有特殊的表示法。如果函数体包含在花括号当中但没有前面的=号,那么返回类型就是Unit,这样的函数被称为过程。过程不返回值,我们调用它仅仅是为了它的副作用。
懒值
当val被声明为lazy时,它的初始化将被推迟,直到我们首次对它取值。
val words = scala.io.Source.fromFile("words").mkString;//在words被定义时即被取值 lazy val words = scala.io.Source.fromFile("words").mkString;//在words被首次使用时取值 def words = scala.io.Source.fromFile("words").mkString;//在每一次words被使用时取值 |
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。