首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Scala 高阶(九):Scala模式匹配

常量 类型 数组 列表 元组 对象及样例类 四、声明变量模式匹配 五、for表达式模式匹配 六、偏函数模式匹配 ---- 本次主要分享Scala关于模式匹配内容,Scala模式匹配类似于Java...switch语法,但是Scala在基于Java思想上补充了特有的功能。...Scala ,模式匹配可以匹配所有的字面量,包括字符串,字符,数字,布尔值等等。...对于数组可以定义多种匹配形式,可以定义模糊元素类型匹配、元素数量匹配或者精确某个数组元素值匹配 // 匹配数组 for (arr <- List( Array(0),...例如该偏函数输入类型为List[Int],、需要是第一个元素是 0 集合,这就是通过模式匹配实现

1.5K30
您找到你想要的搜索结果了吗?
是的
没有找到

Scala 模式匹配

这里模式匹配可能是历经函数式编程才引入概念,是广泛存在于编程语言函数使用,而并非以前接触 “正则表达式” 这样仅仅用于字符串处理特性。...虽然说,这个例子可以说和使用 if-else 相比,似乎没有太大区别,但是在存在不同数组合情况时候,这个写法优势就体现出来了: translate :: String -> String translate...再挪到 Scala 里面看模式匹配,上面的情况也都能够支持。...当然,除了上面的情形,模式匹配还可以匹配参数类型。...上面的这些模式匹配方式组合起来,可以执行一些复杂匹配,比如基于构造器: case Node(_, Node(1,_,_), Node(2,_,_)) 这样,是要求构造器三个参数,左子树参数值是

95830

有趣Scala模式匹配

Scala提供了一种类比switch/case更为强大选择匹配模式,写作 选择语句 match {可选分支} 它被称为模式匹配,模式匹配包含了一系列以case关键字开头分支,每一个分支包含一个模式或者是多个表达式...上例所展示就是常量模式常量1,2去匹配,还使用了_通配符匹配任何对象(建议放在最后面,因为Scala模式匹配是按顺序)。...(b) res1: Test2 = Test2(cd) 我们创造了两个样例类Test1和Test2,Test1接受Test2作为构造参数,实例化两个样例类后发现,在构造方法匹配Scala采用了深度匹配...> matchTest(("a","b","c")) found:abc 匹配类型模式 除了上述匹配模式选出值,还可以用来做类型检查和测试。...这里可以根据传进去类型反馈对应结果。

1K40

Scala篇】--ScalaTrait、模式匹配、样例类、Actor模型

一、前述 Scala Trait(特征) 相当于 Java 接口,实际上它比接口还功能强大。 模式匹配机制相当于javaswitch-case。...2、举例:trait带属性带方法实现 继承多个trait如果有同名方法和属性,必须要在类中使用“override”重新定义。 trait不可以传参。...match       1、概念理解:          Scala 提供了强大模式匹配机制,应用也非常广泛。        ...2、代码及注意点 模式匹配不仅可以匹配值还可以匹配类型 从上到下顺序匹配,如果匹配到则不再往下匹配匹配不上时,会匹配到case _ ,相当于default match 最外面的”{ }”可以去掉看成一个语句...,还可以匹配类型 * 2.模式匹配,如果匹配到对应类型或值,就不再继续往下匹配 * 3.模式匹配,都匹配不上时,会匹配到 case _ ,相当于default */ def

69620

scala 模式匹配几个模式

Scala 模式匹配是类似与正则匹配模式匹配,但是不仅仅如此,它还可以匹配对象内在构建形式....模式匹配就是反向构造器,可以通过嵌套器来构造对象,在构造时提供一些参数 例如: val list = List(3,6) list: List[Int] = List(3, 6) scala> list...变量模式 site match { case whateverName => println(whateverName) } 上面把要匹配 site对象用 whateverName 变量名代替,所以它总会匹配成功...单纯通配符模式通常在模式匹配最后一行出现,case _ => 它可以匹配任何对象,用于处理所有其它匹配不成功情况。...类型模式 "hello" match { case _:String => println("ok")} ok 如果使用了泛型,它会被擦拭掉,如同java做法,所以上面的 List[String] 里

1.2K20

Scala类型推断

类型推断指的是程序语言有自动推断表达式数据类型能力,而无需程序员指定数据类型,简化程序员工作。如下面,可以指定a为Int类型,也可以让Scala推断出b为Int类型。...scala> val a:Int = 1 a: Int = 1 scala> val b = 1 b: Int = 1 对于类型推断算法最出名应该是HM算法,大概意思就是先构建一棵包含全部元素解析树...HM算法是基于全局类型进行推导,但是Scala有些许不同,因为Scala需要支持面向对象编程,所以它选择了局部基于程序流方式。...Int = 3 这里体现了基于局部类型推断局限,Scala无法推断出sum函数返回类型。...sort1类型推断出_>_类型,自然就会报错了,而我们对sort1函数稍作修改: scala> def sort1[T](xs:List[T])(cp:(T,T) => Boolean) = {xs

61210

Scala存在类型

Scala存在类型 存在类型也叫existential type,是对类型做抽象一种方法。可以在你不知道具体类型情况下,就断言该类型存在。 存在类型用_来表示,你可以把它看成java?。...上面的表格以常用Seq为例,列举了存在类型例子。...same type after erasure: (seq: Seq)Seq def double(seq: Seq[Int]): Seq[Int] = seq map (_*2) 问题就在于编译过程类型擦除...我们看一下Seq类型定义: type Seq[+A] = scala.collection.Seq[A] 从定义我们知道,Seq类型一定是需要一个类型参数,如果我们这样写: def double...extends A>类似之处。 你会在scala代码中看到很多Seq[_]代码,存在类型主要目的是为了兼容java代码。 更多教程请参考 flydean博客

49210

TypeScript 数组类型定义

在 TypeScript 声明和初始化数组也很简单,和声明数字类型和字符串类型变量也差不多,只不过在指定数组类型时要在类型后面加上一个括号 [] 语法格式 const array_name: dataype...[] = [val, val2]; 示例 声明一个 string 类型数组 const character: string[] = ["杨过", "小龙女"]; 一维数组类型 声明一个 number...array: Array = ['孟浩然', 99]; 除了使用括号 [] 方法来声明数组,你还可以使用 数组泛型 来定义数组 语法格式 const array_name...注意: 以下示例类型数组,则会限制内层数组元素数量 Array : 表示内层数组元素是 string 类型,限制元素数量是 1 个,输入多个会报错 const test3...个 建议: 在定义数组类型时候使用数组泛型定义,这样显得更直观一点 Tuple 元组类型(元组类型允许表示一个已知元素数量和类型数组

5.3K40

scala如何解决类型强转问题

scala如何解决类型强转问题   scala属于强类型语言,在指定变量类型时必须确定数据类型,即便scala拥有引以为傲隐式推到,这某些场合也有些有心无力。   ...例如:     java同属强类型语言,但java可以进行类型强转。因此在进行面向接口编程时,借助类型强转,只要编码没有问题,就可以使用准备使用class类。但在scala,这条路就走不通了。...因为scala没有类型强壮。   那如何办呢?   众所周知,scala编译后变成字节码文件,运行在jvm。那么从骨子里,scala可以说是脱胎于java,同样scala可以调用java所有的类库。...既然如此,如果在java不借助类型强转,又如何完成同样事情呢?   结果是:反射!   ...ScalaClass2 extends ScalaInter { def myOut(str:String)={ println("class2=="+str) } }   下面我们要做就是通过放射完成类型强转功能

1.8K90

理解ScalaSymbol类型

相信很多人和我一样,在刚接触Scala时,会觉得Symbol类型很奇怪,既然Scala字符串都是不可变,那么Symbol类型到底有什么作用呢?     ...简单来说,相比较于String类型,Symbol类型有两个比较明显特点:节省内存和快速比较。在进入正题之前,让我们先来了解一下JavaStringintern()方法。...默认情况下,代码字符串字面量和字符串常量值都是被拘禁,例如: String s1 = "abc"; String s2 =new String("abc"); //返回true System.out.println...节省内存     在Scala,Symbol类型对象是被拘禁(interned),任意同名symbols都指向同一个Symbol对象,避免了因冗余而造成内存开销。...从这个角度看,ScalaSymbol类型不仅有效率上提升,而且也简化了编码复杂度。

1.5K30

(数据科学学习手札49)Scala模式匹配

一、简介   Scala模式匹配类似Javaswitch语句,且更加稳健,本文就将针对Scala模式匹配一些基本实例进行介绍: 二、Scala模式匹配 2.1 基本格式   Scala模式匹配基本格式如下...,会直接将传入匹配对象传递给该新变量,但该新变量作用域只限于match语句内,在外无法调用; 2.4 匹配数组与元组 数组:   在对数组进行模式匹配时,可以配合通配符完成一些模糊匹配功能: import...} } }   通过在匹配内容添加_*,来表示匹配任意多数组元素,这这里表示匹配第一个元素时"Spark",之后任意多其他元素可变长数组; 元组:   在匹配元组时,同样可以使用对应语法来实现模糊匹配...Scala错误处理机制,其实catch{}语句中各条执行语句就是一条条模式匹配语句,这里便不再赘述。   ...以上就是Scala关于模式匹配一些基础内容简单介绍,如有笔误,望指出。

71340

C++数组类型操作

这是我参与「掘金日新计划 · 12 月更文挑战」第2天,点击查看活动详情 本文演示了一些可用于查询和操作数组类型(甚至是多维数组内置函数。...在我们需要信息或操作我们用不同维度启动数组情况下,这些函数非常有用。这些函数在头文件 定义。一些功能包括: is_array() : 顾名思义,此函数唯一目的是检查变量是否为数组类型。...,可应用于C++数组。...此函数返回数组特定维度大小。此函数接受两个参数,数组类型和必须找到其大小维度。这也具有打印值成员常量值。...remove_extent() : 此函数删除声明矩阵/数组左侧第一个维度。 remove_all_extents(): 此函数删除矩阵/数组所有维度并将其转换为基本数据类型

1.5K30

Scala篇】--Scala函数

一、前述 Scala函数还是比较重要,所以本文章把Scala可能用到函数列举如下,并做详细说明。 二、具体函数 1、Scala函数定义 ?...,要指定传入参数类型 方法可以写返回值类型也可以不写,会自动推断,有时候不能省略,必须写,比如在递归函数或者函数返回值是函数类型时候。  ...scala函数有返回值时,可以写return,也可以不写return,会把函数中最后一行当做结果返回。当写return时,必须要写函数返回值。...这种说法无论方法体里面什么逻辑都成立,scala可以把任意类型转换为Unit.假设,里面的逻辑最后返回了一个string,那么这个返回值会被转换成Unit,并且值会被丢弃。...,或者函数返回类型是函数,或者函数参数和函数返回类型是函数函数。

1.4K10

Scala 谜题 - 有趣类型转换

Scala ,List[String] 和 List[Int] 之间并没有继承关系,但是下面的代码竟然可以通过编译并且顺利运行: object Test extends App { val strList...我们把 List[String] 成功转换成了 List[Int] 类型。事实上真的是这样吗?...at test.Test.main(Test.scala) 哈哈,抛出了类型转换异常。编译器推断出 head 类型为 Int 型,但在运行时却被赋予了 String 型,所以导致了运行时错误。...在调用 asInstanceOf 方法时,编译器给予开发者足够信任,认为你有足够理由去这样做。...但是在运行时,由于泛型类类型参数被擦除了,所以 List[String] 和 List[Int] 在运行时都是 List 类型,但是在操作其元素时要格外小心,否则会抛出类型转换异常。

76070

scala 类型 最详细解释

scala 是一个强类型语言,但是在编程时可以省略对象类型. java对象类型(type)与类(class)信息 jdk1.5 前 类型与类是一一映射,类一致类型就一致. 1.5 后引入了泛型,jvm...a1.foo(b2) ^ a1.foo方法接受参数类型为:a1.B,而传入b2 类型是 a2.B,两者不匹配。...[A] 也是 List[B] 类型 逆变 : A 是 B 类型, List[B] 是 List[A] 类型 在java引用类型数组类型是支持协变, 即 String[] 类型是 Object...随着java引入了泛型,sort方法可以用类型参数,因此数组协变不再有用。只是考虑到兼容性。 scala里不支持数组协变,以尝试保持比java更高纯粹性。...不同于java里其他泛型集合实现,数组类型类型参数在运行时是必须,即 [Ljava/lang/String 与 [Ljava/lang/Object 是两个不同类型,不像 Collection

83910
领券