转载自并发编程网 – ifeve.com 原文:http://ifeve.com/pattern-matching-5/
在for表达式中
for(x <- collection) { balabala }
直觉上以为 x 就是个用于迭代每一个元素的局部变量。
我们看一些例子:
scala> for(i <- List(1,2,3) ) {println(i)} // 看看语法树 scala> tb.parse("for(i <- List(1,2,3) ) {println(i)}") res2: tb.u.Tree = List(1, 2, 3).foreach(((i) => println(i)))
再多一点花样,变量绑定:
scala> tb.parse("for(i@2 <- List(1,2,3) ) {println(i)}") res3: tb.u.Tree = List(1, 2, 3).withFilter(((check$ifrefutable$1) => check$ifrefutable$1: @scala.unchecked match { case (i @ 2) => true case _ => false })).foreach(((x$1) => x$1: @scala.unchecked match { case (i @ 2) => println(i) }))
将i绑定到常量模式2上,List(1,2,3)中只有2能匹配
下一个例子:
// 过滤出女性的名字 scala> for ((name,"female") <- Set("wang"->"male","zhang"->"female") ) print(name) zhang
会在两个点做模式匹配,第一个点是从Set中过滤符合条件的元素时,第二个点是对过滤后的集合迭代执行后续逻辑时。
scala> tb.parse("for ((name,\"female\") <- Set(\"wang\"->\"male\",\"zhang\"->\"female\") ) print(name)") res5: tb.u.Tree = Set("wang".$minus$greater("male"), "zhang".$minus$greater("female")).withFilter(((check$ifrefutable$2) => check$ifrefutable$2: @scala.unchecked match { case scala.Tuple2((name @ _), "female") => true case _ => false })).foreach(((x$2) => x$2: @scala.unchecked match { case scala.Tuple2((name @ _), "female") => print(name) }))
同样,还可以类型模式在从集合过滤时按类型条件。
scala> for((k,v:Int) <- List(("A"->2),("B"->"C"))) {println(k)} A
相关推荐
我们想要按照特定的文本模式进行匹配或查找。 2、解决方案 如果想要匹配的只是简单的文字,那么通常只需要用基本的字符串方法就可以了,比如str.find()、str.endswith()、str.startswith()或类似函数。 示例: \...
Mark Cohen( ),Tab Atkins-Bittner(Google, ),Yulia Startsev(Mozilla, ),Daniel Rosenwasser(微软, ),Jack Works( Sujitech, ),Ross Kirsling(Sony, )问题有多种方法可以匹配语言中的值,...
形式理论FormalTheory是一个允许对NFA,DFA和正则...重型单元测试范围现代自动加载支持通过规则进行正则表达式优化注意:FA是DFA或NFA 即将推出:trade_mark: 通过突变进行正则表达式优化基于正/负匹配列表的广义DFA求解
提供添加具有匹配正则表达式的用户定义令牌的可能性。 从指定的路由名称反向生成 url。 版权和许可 麻省理工学院许可证 (MIT) 版权所有 (c) 2014 Mark Rolich 特此授予任何人免费获得本软件副本和相关文档文件...
switch 表达式扩展了 switch 语句,使其不仅可以作为语句(statement),还可以作为表达式(expression),并且两种写法都可以使用传统的 switch 语法,或者使用简化的“case L ->”模式匹配语法作用于不同范围并...
switch 表达式扩展了 switch 语句,使其不仅可以作为语句(statement),还可以作为表达式(expression),并且两种写法都可以使用传统的 switch 语法,或者使用简化的“case L ->”模式匹配语法作用于不同范围并...
第一个表达式匹配结构名称中包含的短语,而第二个表达式匹配排除的短语。 如果结构名称与包含语句匹配,而不与排除语句匹配,则认为它是匹配的。 可以将其他字段添加到每个图集结构,以指定有关该结构的其他属性(请...
正则表达式匹配 11 盛水最多的容器 :check_mark: 12 整数转罗马 , :check_mark: 13 罗马到整数 , , :check_mark: 14 最长公共前缀 :check_mark: 15 3总和 :check_mark: 16 3和最近 :check_mark: 17 电话号码的字母...
正则表达式匹配 难的 :cross_mark: 11 盛水最多的容器 中等的 :cross_mark: 12 整数转罗马 中等的 :cross_mark: 13 罗马到整数 简单的 :cross_mark: 14 最长公共前缀 简单的 :cross_mark: 15 3总和 中等的 :cross_...
删除旧包 Github操作,用于删除Github软件包注册表中的旧版本的软件包。 这与非常相似,但是针对不同的用例。 该操作通过获取最多20个软件包(每个软件包最多具有最... 版本的正则表达式模式 :cross_mark: :cross_
括号在正则表达式中表示,文本中的字符匹配括号中任意一个字符即符合查找条件。 (3)按一下空格键,添加空格符。空格符是空行的一个组成成分。 (4)选择“制表符”,添加代表制表符的“\t”。 (5)移动光标,将...
括号在正则表达式中表示,文本中的字符匹配括号中任意一个字符即符合查找条件。 (3)按一下空格键,添加空格符。空格符是空行的一个组成成分。 (4)选择“制表符”,添加代表制表符的“\t”。 (5)移动光标,将...
它生成词法分析器的Java源,该词法分析器读取输入,将输入与spec文件中的正则表达式进行匹配,如果正则表达式匹配,则运行相应的操作。 词法分析器通常是编译器中的第一步,它匹配关键字,注释,运算符等,并为解析...
灰烬文字突出显示 此插件公开了一个简单的 ,它使用可样式化CSS类( mark )在span中包装文本的匹配部分。 它选择了可能在当前环境中表现最佳的算法,使其速度比使用正则表达式的惯用实现快两倍。用法选择一种安装...
表达式寄存器: “= (使用:输入表达式后ENTER, p粘贴) 2.17折迭 zfa{ 创建折迭 zc 折迭 zo 打开折迭 zM 折迭所有 zR 打开所有折迭 2.18文件比较vimdiff :vimdiff file1 file2 :diffsplit filename 或命令行下 vim...
正则表达式匹配 11 盛水的容器 12 整数转罗马 13 罗马到整数 15 3 和 电话号码的 17 个字母组合 18 4 和 20 个有效括号 22 生成括号 23 合并k个排序列表 26 从排序数组中删除重复项 27 删除元素 28 实现 strStr() 29...
在 developerworks 上其新系列的第一篇文章中,软件工程师 Mark Kolb 向您展示了如何使用 JSTL 标记来避免在 JSP 页面中使用脚本编制元素。您还将了解如何通过从表示层删除源代码来简化软件维护。最后,您将了解 ...
在小型缓冲区中构造正则表达式时,您会获得有关比赛(包括小组比赛)的实时视觉反馈: 在微型缓冲区中构造替换项时,您将获得替换项的实时视觉反馈: 它可以用于一次性替换所有匹配项(例如replace-regexp ),也...