Learning Path
浏览 Scala 相关教程与章节。
主流编程语言、数据结构、设计模式、正则与基础算法。
教程
45
Scala 教程 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。 Scala 源代码被编译成 Java 字节码,所以它可以运行于 JVM 之上,并可以调用现有的 Java 类库。 谁适合阅读本教程? 本教程适合想从零开始学习 Scala 编程语言的开发人员。当然本教程也会对一些模块进行深入..
Scala 匿名函数 Scala 函数 Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体。 使用匿名函数后,我们的代码变得更简洁了。 下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数: var inc = (x:Int) => x+1 上述定义的匿名函数,其实是下面这种写法的简写: def add2 = new Function1[Int,Int]{ def apply(x:In..
Scala 函数柯里化(Currying) Scala 函数 柯里化(Currying)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。 实例 首先我们定义一个函数: def add(x:Int,y:Int)=x+y 那么我们应用的时候,应该是这样用:add(1,2) 现在我们把这个函数变一下形: def add(x:Int)(y:Int) = x + y 那么..
Scala 函数传名调用(call-by-name) Scala 函数 Scala的解释器在解析函数参数(function arguments)时有两种方式: 传值调用(call-by-value):先计算参数表达式的值,再应用到函数内部; 传名调用(call-by-name):将未计算的参数表达式直接应用到函数内部 在进入函数内部前,传值调用方式就已经将参数表达式的值计算完毕,而传名调用是在函数内部进行参数表达式的值计算的..
Scala 函数 - 默认参数值 Scala 函数 Scala 可以为函数参数指定默认参数值,使用了默认参数,你在调用函数的过程中可以不需要传递参数,这时函数就会调用它的默认参数值,如果传递了参数,则传递值会取代默认值。实例如下: object Test { def main(args: Array[String]) { println( '返回值 : ' + addInt() ); ..
Scala 指定函数参数名 Scala 函数 一般情况下函数调用参数,就按照函数定义时的参数顺序一个个传递。但是我们也可以通过指定函数参数名,并且不需要按照顺序向函数传递参数,实例如下: object Test { def main(args: Array[String]) { printInt(b=5, a=7); } def printInt( a:Int, b:Int ) = { ..
Scala 函数 - 可变参数 Scala 函数 Scala 允许你指明函数的最后一个参数可以是重复的,即我们不需要指定函数参数的个数,可以向函数传入可变长度参数列表。 Scala 通过在参数的类型之后放一个星号来设置可变参数(可重复的参数)。例如: object Test { def main(args: Array[String]) { printStrings('Runoob', ..
Scala 高阶函数 Scala 函数 高阶函数(Higher-Order Function)就是操作其他函数的函数。 Scala 中允许使用高阶函数, 高阶函数可以使用其他函数作为参数,或者使用函数作为输出结果。 以下实例中,apply() 函数使用了另外一个函数 f 和 值 v 作为参数,而函数 f 又调用了参数 v: object Test { def main(args: Array[String]) { ..
Scala 函数嵌套 Scala 函数 我们可以在 Scala 函数内定义函数,定义在函数内的函数称之为局部函数。 以下实例我们实现阶乘运算,并使用内嵌函数: object Test { def main(args: Array[String]) { println( factorial(0) ) println( factorial(1) ) println( factorial(2..
Scala 偏应用函数 Scala 函数 Scala 偏应用函数是一种表达式,你不需要提供函数需要的所有参数,只需要提供部分,或不提供所需参数。 如下实例,我们打印日志信息: import java.util.Date object Test { def main(args: Array[String]) { val date = new Date log(date, 'message1..
Scala 递归函数 Scala 函数 递归函数在函数式编程的语言中起着重要的作用。Scala 同样支持递归函数。 递归函数意味着函数可以调用它本身。 以上实例使用递归函数来计算阶乘: object Test { def main(args: Array[String]) { for (i..
Scala 访问修饰符 在 Scala 中,访问修饰符用于控制类、对象、特质(traits)及其成员(如字段和方法)的可见性和访问权限。 Scala 访问修饰符基本和 Java 的一样,分别有:private,protected,public。 如果没有指定访问修饰符,默认情况下,Scala 对象的访问级别都是 public。 Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的..
Scala 数组 Scala 语言中提供的数组是用来存储固定大小的同类型元素,数组对于每一门编程语言来说都是重要的数据结构之一。 声明数组变量并不是声明 number0、number1、...、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。 数组的第一个..
Scala 基础语法 如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法。 Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的。 我们可以认为 Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递。接下来我们来理解下,类,对象,方法,实例变量的概念: 对象 - 对象有属性和行为。例如:一只狗的状属性有:颜色,名字,行为有:叫、跑..
Scala break 语句 Scala 循环 Scala 语言中默认是没有 break 语句,但是你在 Scala 2.8 版本后可以使用另外一种方式来实现 break 语句。当在循环中使用 break 语句,在执行到该语句时,就会中断循环并执行循环体之后的代码块。 语法 Scala 中 break 的语法有点不大一样,格式如下: // 导入以下包 import scala.util.control._ // 创建 Bre..
Scala 类和对象 类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。 我们可以使用 new 关键字来创建类的对象,实例如下: 实例 [mycode4 type='scala'] class Point(xc: Int, yc: Int) { var x: Int = xc va..
Scala 闭包 在 Scala 中,闭包(Closure)是一种函数,它能够捕获并包含其定义环境中的自由变量。 闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。 闭包可以访问函数外部的变量并在函数内部使用这些变量,即使在变量的作用域已经超出其定义环境时,闭包仍然可以访问这些变量。 闭包的关键在于它可以“关闭”函数外部的变量,使得这些变量在函数内仍然可用。 如下面这段匿名的函数: val multiplier..
Scala Collection Scala提供了一套很好的集合实现,提供了一些集合类型的抽象。 Scala 集合分为可变的和不可变的集合。可变集合可以在适当的地方被更新或扩展。这意味着你可以修改,添加,移除一个集合的元素。而不可变集合类,相比之下,永远不会改变。不过,你仍然可以模拟添加,移除或更新操作。但是这些操作将在每一种情况下都返回一个新的集合,同时使原来的集合不发生改变。 接下来我们将为大家介绍几种常用集合类型的应用: ..
Scala 数据类型 Scala 支持的主要数据类型包括基本类型、集合类型、和特殊类型。 下表列出了 Scala 支持的数据类型: 类型类别数据类型描述Scala标准库中的实际类基本类型Byte8位有符号整数,数值范围为 -128 到 127scala.Byte基本类型Short16位有符号整数,数值范围为 -32768 到 32767scala.Short基本类型Int32位有符号整数,数值范围为 -2147483648 到 214..
Scala do...while 循环 Scala 循环 不像 while 循环在循环头部测试循环条件, Scala 语言中,do...while 循环是在循环的尾部检查它的条件。 do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。 语法 Scala 语言中 while 循环的语法: do { statement(s); } while( condition );..
Scala 转义字符 在 Scala 中,转义字符用于表示无法直接在字符串字面量中书写的特殊字符。 转义字符以反斜杠 \ 开头,紧跟一个特定的字符,表示某种特殊含义或效果。 下表列出了常见的转义字符: 转义字符描述\b退格符\t制表符 (Tab)\n换行符 (Line Feed)\f换页符 (Form Feed)\r回车符 (Carriage Return)\'双引号\'单引号\\反斜杠 在字符或字符串中,0..
Scala 异常处理 Scala 的异常处理和其它语言比如 Java 类似。 Scala 的方法可以通过抛出异常的方法的方式来终止相关代码的运行,不必通过返回值。 抛出异常 Scala 抛出异常的方法和 Java一样,使用 throw 方法,例如,抛出一个新的参数异常: throw new IllegalArgumentException 捕获异常 异常捕捉的机制与其他语言中一样,如果有异常发生,catch 字句是按次序捕..
Scala 提取器(Extractor) 提取器是从传递给它的对象中提取出构造该对象的参数。 Scala 标准库包含了一些预定义的提取器,我们会大致的了解一下它们。 Scala 提取器是一个带有unapply方法的对象。unapply方法算是apply方法的反向操作:unapply接受一个对象,然后从对象中提取值,提取的值通常是用来构造该对象的值。 以下实例演示了邮件地址的提取器对象: 实例 [mycode4 type='..
Scala 文件 I/O Scala 进行文件写操作,直接用的都是 java中 的 I/O 类 (java.io.File): 实例 [mycode4 type='scala'] import java.io._ object Test { def main(args: Array[String]) { val writer = new PrintWriter(new File('..