常量 类型 数组 列表 元组 对象及样例类 四、声明变量中的模式匹配 五、for表达式模式匹配 六、偏函数模式匹配 ---- 本次主要分享Scala中关于模式匹配的内容,Scala中的模式匹配类似于Java...中的switch语法,但是Scala在基于Java的思想上补充了特有的功能。...、元素数量匹配或者精确的某个数组元素值匹配 // 匹配数组 for (arr <- List( Array(0), Array(1, 0), Array(0...case Array(x, y) => "Array:" + x + ", " + y case Array(0, _*) => "以0开头的数组" case Array...,必须用_1 _2 …,可以用元组赋值将元素赋给变量 指定特定元素的值,可以实现类似于循环守卫的功能 object TestMatchFor { def main(args: Array[String
类型系统具体支持以下特性:泛型类协变和逆变标注类型参数的上下限约束把类别和抽象类型作为对象成员复合类型引用自己时显式指定类型视图多态方法扩展性Scala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展..._,这里也能解释,为什么以scala开头的包,在使用时都是省去scala.的。如果想要引入包中的几个成员,可以使用selector(选取器):import java.awt....Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分,如def main(args: Array\[String]) {}Scala 程序里,语句末尾的分号通常是可选的。...数组声明的语法格式:var z:Array[String] = new Array[String](3)var x = new Array[String](3)多维数组一个数组中的值可以是另一个数组,...Scala 提取器是一个带有unapply方法的对象。unapply方法算是apply方法的反向操作:unapply接受一个对象,然后从对象中提取值,提取的值通常是用来构造该对象的值。
(筛选)放置到新的集合中 scala object demo3 { def main(args: Array[String]): Unit = { //只保留A开头的单词 val...当然可以依次类推 Array(x,y,z) 匹配数组有 3 个元素的等等…. 3) Array(0,_*) 匹配数组以 0 开始 3、匹配列表 scala for (list <- Array(List.../ 匹配 以 0 开头的后面有任意元素的 List case x :: Nil => List(x) case _ => "something else" } } 4、匹配元组 scala...中对象的 unapply 方法(提取器)返回 some 集合则为匹配成功 6) 返回 None 集合则为匹配失败 scala def main(args: Array[String]): Unit =...)(s2: String):Boolean={ s1.eq(s2) } 6、控制抽象 1) 参数是函数 2) 函数参数没有输入值也没有返回值 scala def main(args: Array
= j)) { println(i + j) } //for推导式:如果for的循环体以yield开头,则该循环会构建一个集合 // 每次迭代生成集合中的一个元素...无特定顺序) val lst11 = lst0.fold(100)((x, y) => x + y) //折叠:有初始值(有特定顺序) val lst12 = lst0.foldLeft...类、对象、继承和trait 3.1 类 3.1.1 类的定义 Scala中,可以在类中定义类、以在函数中定义函数、可以在类中定义object;可以在函数中定义类,类成员的缺省访问级别是:public...apply方法有点类似于java中的构造函数,接受构造参数变成一个对象。 unapply方法就刚好相反,它是接收一个对象,从对象中提取出相应的值,主要用于模式匹配(后文阐述)中。...模式匹配和样例类 4.1 模式匹配 Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如替代Java中的switch语句、类型检查等。
类的名称以大写字母开头。 方法的名称以小写字母开头。 变量的名称以小写字母开头。 ? 2,注释 单行注释用//开头。 多行注释用/*开头,以*/结尾。...特殊多行注释,以/**开头,以*/结束,如果有多行,每行通常以星号开头。 这种特殊的多行注释需要写在类和方法的定义处,可以用于自动创建文档。 ? ?...七,字符串String Java 中的字符串和Scala中的字符串来源于同一个包,java.lang.String,两者具有完全相同的方法。 以下为字符串一些常用操作。 ? ?...八,数组Array Java 中的数组和 C++中的数组很像,其长度是不可变的,但是数组中的元素内容是可以改变的。 数组是引用类型,一般是用花括号{}作为数组范围标识。...二十六,注解 Java中的注解是放在Java源码的类、方法、属性、参数前的一种特殊"注释",以@开头。 注解可以看成用作标注的一种"元数据"。
3、标识符的命名规范 以字母或者下划线开头,后接字母、数字、下划线 以操作符开头,且只包含操作符(+ - * / # !...集合中的每个元素的子元素映射到某个函数并返回新集合。 **分组(groupBy):**按照指定的规则对集合的元素进行分组。...("a","b","c") // 弹出元素(a) println(que.dequeue()) 七、模式匹配 1、基本语法 Scala中的模式匹配类似于Java中的switch语法 模式匹配语法中,采用...若只提取对象的一个属性,则提取器为unapply(obj:Obj):Option[T] 若提取对象的多个属性,则提取器为unapply(obj:Obj):Option[(T1,T2,T3…)] 若提取对象的可变个属性...Person05(var name: String, age: Int) 样例类仍然是类,和普通类相比,只是其自动生成了伴生对象,并且伴生对象中自动提供了一些常用的方法,如apply、unapply、
类和对象的名称以大写字母开头。 方法的名称以小写字母开头。 $可以被用作字母,但要慎重使用。...因为有些特殊符号如 + 的内部表示为 $plus 当存在标识符和关键字冲突时,可以加上``来避免冲突 ? 2,注释 多行注释用/*开头,以*/结尾。 单行注释用//开头。 ?...六,字符串String Scala的字符串是一种有序且不可变的基本数据类型,直接使用的Java中定义好的java.lang.String。 1,创建字符串 ? 2,字符串常用操作 ? ? ?...函数的类型是函数的参数和返回值的类型映射关系, 如 Int => Unit , (Array[Int],String) => Int 。...函数的值是函数的参数和返回值的取值映射关系, 如 x => x+1 x,y => x+y 。 使用这种方式声明的函数叫做匿名函数。 此外,当函数表达式中引用了非参数的变量时,这种函数叫做闭包。
类和对象的名称以大写字母开头。方法的名称以小写字母开头。可以被用作字母,但要慎重使用。因为有些特殊符号如 + 的内部表示为 plus当存在标识符和关键字冲突时,可以加上``来避免冲突 ?...2,注释 多行注释用/*开头,以*/结尾。 单行注释用//开头。 ?...六,字符串String Scala的字符串是一种有序且不可变的基本数据类型,直接使用的Java中定义好的java.lang.String。 1,创建字符串 ? 2,字符串常用操作 ? ? ?...函数的类型是函数的参数和返回值的类型映射关系, 如 Int => Unit , (Array[Int],String) => Int 。...函数的值是函数的参数和返回值的取值映射关系, 如 x => x+1 x,y => x+y 。 使用这种方式声明的函数叫做匿名函数。 此外,当函数表达式中引用了非参数的变量时,这种函数叫做闭包。
scala> val arr2 = new Array[String](3) // 构造3个长度的字符型数组 arr2: Array[String] = Array(null, null, null)...对于arr2来说,在不指定具体的初始值情况下,Scala会根据指定的数据类型,设定对应的默认值,如字符型的默认值为null,整型的默认值为0,浮点型的默认值为0.0。...举例 scala> var A2 = ArrayBuffer[String]() // 在变长数组A2中增加单个元素 scala> A2 += "One" scala> println("A2 = "...,该方法可以指定元素拼接的连接符,如代码中的逗号。...Four scala> println("数组A1元素的最大值为" + A1.max) 数组A1元素的最大值为13 scala> printf("数组A1中有%d个元素大于2\n", A1.count
") case 0 :: tail => println("0开头的列表") case x :: y :: Nil => println(s"只有另两个元素${x}, ${y}的列表")...定义 scala中,Option类型来表示可选值。...提取器(Extractor) 我们之前已经使用过scala中非常强大的模式匹配功能了,通过模式匹配,我们可以快速匹配样例类中的成员变量。例如: // 1....伴生对象中,还有一个unapply方法。与apply相反,unapply是将该类的对象,拆解为一个个的元素。 要实现一个类的提取器,只需要在该类的伴生对象中实现一个unapply方法即可。...,并使用match表达式进行模式匹配,提取类中的字段。
Double 双精度浮点数,如0.11 Boolean true或false String也属于Scala基本数据类型,归属于java.lang包,其余的数据类型都是Scala自带基础类型包的成员...Map映射中的键集合 我们使用.keySet来提取Map映射中的键名集合: scala> DemoMap.keySet res3: scala.collection.Set[String] = Set...(R, Julia, Java, Python) 8.提取Map映射中的值集合 scala> DemoMap.values res4: Iterable[Int] = HashMap(3, 100,...,Scala中的列表被设计来存放各种类型的元素,且Scala中的列表类型有三种模式,一种是当列表内部元素类型统一时,如List[Int],一种是当列表中同时包含几种不同类型元素时,为List[Any],... 8.得到集合中所有元素的个数 scala> set1.product res0: Int = 5040 scala> set1.size res1: Int = 7 9.得到一个集合中的最大值
)Array[Int] scala> makeArr(10).foreach(println) 9 8 3 5 9 6 8 8 0 1 编写一个循环,将整数数组中相邻的元素置换。...(a); scala> a.foreach(println); 2 1 4 3 5 给定一个整数数组,产出一个新的数组,包含原数组中的所有正值,以原有顺序排列,之后的元素是所有零或负值,以原有顺序排列...); 1 4 5 0 0 -2 -3 创建一个由java.util.TimeZone.getAvailableIDs返回的时区集合,并只显示以America/前缀开头的时区,并且有序。...[String,Double] = Map(book -> 9.0, gun -> 16.2, ipad -> 900.0) 6、编写一段WordCount函数,统计传入的字符串中单词的个数 scala...-> 2, zhong -> 1) 9、编写一个函数,从一个整型链表中去除所有的零值。
(0) => "0" case Array(x, y) => x + "=" + y case Array(0, _*) => "以0开头和数组" case...12.9 变量声明中的模式 1、基本介绍 match 中每一个 case 都可以单独提取出来,意思是一样的。...3、样例类最佳实践1 当我们有一个类型为 Amount 的对象时,可以用模式匹配来匹配他的类型,并将属性值绑定到变量(即:把样例类对象的属性值提取到某个变量,该功能非常有用!)...(即:把样例类对象的属性值提取到某个变量,该功能非常有用!) ...,_是将 its 中每个循环的元素传递到 price 中 it 中。
,有以下四种规则: (1)以字母或者下划线开头,后接字母、数字、下划线 (2)以操作符开头,且只包含操作符(+ - * / # !...一、变量: 在程序运行过程中其值可能发生改变的量叫做变量。如:时间,年龄。 二、常量 在程序运行过程中其值不会发生变化的量叫做常量。如:数值 3,字符'A'。...声明变量实例如下: var myVar : String = "Foo" var myVar : String = "Too" 声明常量实例如下:可以理解java中的以 final 修饰的变量——常量...在scala支持 插值写入 的方式,该方式类似于 java中的 format。...中对Java中的String增强 Unit:对应 Java中的void,用于方法返回值的位置,表示方法没有返回值。
p的第一个元素,但不赋给任何变量 case List(_,y,_*) => y case _ => "Other" } } } 上述实例实例中,第一个模式匹配Array中第一个和第二个元素...” case _ => 0 } } 在上面代码中,模式匹配到的值被当作String绑定到了s中,而在第二个模式中,值被当作Int绑定到x中; 当在匹配类型的时候,必须给出一个变量名,否则将会拿对象本身来匹配...匹配是发生在运行时,Java虚拟机中泛型的类型信息时被擦掉的,因此不能用类型来匹配特定的Map 类型 比如: case m:Map[String,Int] => … // 是不可行的 可以匹配一个通用的映射...序列模式:可以像匹配样本类那样匹配如List或者Array这样的序列类型。...元组模式:匹配元祖 类型模式:匹配变量的类型 Option 类型 Option类型在Scala程序中经常使用,可以将其与Java中可用的null值进行比较,表示null值。
") case 0 :: tail => println("0开头的列表") case x :: y :: Nil => println(s"只有另两个元素${x}, ${y}的列表")...,1开头的元组:1, ${x}, ${y}") case (x, y, 5) => println(s"三个元素,5结尾的元组:${x}, ${y}, 5") case _ => println...定义 scala中,Option类型来表示可选值。...提取器(Extractor) 我们之前已经使用过scala中非常强大的模式匹配功能了,通过模式匹配,我们可以快速匹配样例类中的成员变量。例如: // 1....,并使用match表达式进行模式匹配,提取类中的字段。
Scala以一种简洁、高级的语言将面向对象和函数式编程结合在一起.Scala的静态类型有助于避免复杂应用程序中的bug,它的JVM和JavaScript运行时允许构建高性能的系统,可以轻松地访问庞大的库生态系统...list相关方法总结 1 def +(elem: A): List[A] 前置一个元素列表 2 def ::(x: A): List[A] 在这个列表的开头添加的元素。...min: A 查找最小元素 32 def mkString: String 显示列表的字符串中的所有元素 33 def mkString(sep: String): String 显示的列表中的字符串中使用分隔串的所有元素...map方法用于切分数组元素,将每个切分后的元素放入到一个数组中(一对一)-------") // list:集合 Array:数组 通过map方法获得的素组需要我们再次遍历才能得到元素值.../** * * match scala中的模式匹配 * 注意: * 1.Scala中的模式匹配关键字是Match * 2.Match模式匹配中不仅可以匹配值,还可以匹配类型
其实可以认为scala中并没有真正意义上的基本类型(如java中的基本类型),以上的九种基本类型其实也出在包下是一个类。 ...操作 v3.*(2) v3.split("l") //去重 v3.distinct //去除头n个元素 v3.drop(1) //去除尾部n个元素 v3.dropRight(2) //提取头n个元素 v3....take(1) //提取尾部n个元素 v3.takeRight(2) //filter 根据指定的原则做过滤,其他类型都适用 v3.filter{x=>x!...相当于take(1) v3.head v3.last //以指定字符分割 v3.mkString(",") //反转 v3.reverse 3.三引号 Scala中存在一个特殊的符号——三引号,在三引号中的字符都是普通字符...r2 : String = small 2.match scala中的match类似于其他语言的switch。
-1 高级for 循环 可以使用变量<- 表达式 的形式提供多个生成器,用分号将其隔开 如果for循环的循环体以yield开始,则循环会构造出一个结合,每次迭代生成集合中的一值: 每个生成器都自带一个守卫...,以if开头的Boolean表达式 可以任意多的定义,引入可以在循环中使用变量 定义函数:Scala一般不需要声明返回值类型,会自己推断,但使用递归的时候 必须指定返回类型: 默认参数和带名参数(什么鬼...,Java的思想被颠覆) 过程,Scala对于不返回值的函数有特殊的表示语法,如果函数体包含在花括号中但没有前面的=号,那么返回类型就是Unit 或def box(s : String) : Unit...替换,如-10 > 0,然后用-5,如-5 > 0,这样直到List的最后一个值。...想要标注一个重复参数,在参数的类型之后放一个星号 函数内部,重复参数的类型是声明参数类型的数组。因此,echo函数里被声明为类型“String*”的args的类型实际上是Array[String]。
领取专属 10元无门槛券
手把手带您无忧上云