Tag: 模式匹配

Scala模式匹配列表以外的序列

我有以下代码recursion操作列表中的每个元素 def doMatch(list: List[Int]): Unit = list match { case last :: Nil => println("Final element.") case head :: tail => println("Recursing…"); doMatch(tail) } 现在,忽略这个function可以通过filter()和foreach() ,这工作得很好。 但是,如果我试图改变它接受任何Seq [Int] ,我遇到了问题: Seq没有::,但它确实有+:,据我所知基本上是一样的东西。 如果我试图匹配head +:tail,但是,编译器会抱怨错误:not found:value +:' 无特定于列表,我不知道如何replace它。 如果我经历过前面的问题,我会尝试Seq() 这是我认为代码应该看起来如何,除非它不工作: def doMatch(seq: Seq[Int]): Unit = seq match { case last +: Seq() => println("Final element.") case head +: […]

Pattern.quote方法有什么用?

我试图了解Pattern.quote使用下面的代码: String pattern = Pattern.quote("1252343% 8 567 hdfg gf^$545"); System.out.println("Pattern is : "+pattern); 产生输出: Pattern is : \Q1252343% 8 567 hdfg gf^$545\E 什么是\Q和\E在这里? 文档说明说: 返回指定String的文字模式String 。 这个方法产生一个String ,可以用来创build一个与strings匹配的Pattern ,就好像它是一个字面模式。 input序列中的元字符或转义序列将没有特别的含义。 但是Pattern.quote的返回types是String而不是编译的Pattern对象。 为什么这个方法是必需的,什么是一些用法的例子?

Scala的实验性虚拟模式匹配器是什么?

最近我见到了很多关于scala的新“虚拟化”模式匹配器。 我错过了解释它实际上是什么的备忘录…

Scala多types模式匹配

我想知道如何使用多种types的模式匹配。 我有: abstract class MyAbstract case class MyFirst extends MyAbstract case class MySecond extends MyAbstract case class MyThird extends MyAbstract // shouldn't be matched and shouldn't call doSomething() val x: MyAbstract = MyFirst x match { case a: MyFirst => doSomething() case b: MySecond => doSomething() case _ => doSomethingElse() } 所以我想写一些类似于: x match { […]

解释模式匹配vs开关

我一直在试图解释开关语句和模式匹配(F#)之间的区别,但我没有真正能够解释它..大多数时候,他们只是看着我说“那么为什么你不要只是使用..如果..“。 你将如何解释给他们? 编辑! 感谢大家的伟大的答案,我真的希望我可以标记多个正确的答案。

在f#中的string的开始模式匹配

我想在f#中匹配string的开头。 不知道是否我必须把它们当作一个字符列表或什么。 任何build议,将不胜感激。 这是我正在尝试做的一个伪代码版本 let text = "The brown fox.." match text with | "The"::_ -> true | "If"::_ -> true | _ -> false 所以,我想看看string和匹配的开始。 注意我没有匹配的string列表只是写上述作为我想要做的本质的想法。

如何使用SIFTalgorithm来计算相似的两幅图像?

我已经使用了Andrea Vedaldi的SIFT实现来计算两个相似图像的筛选描述符(第二个图像实际上是从不同angular度放大同一个对象的图片)。 现在我无法弄清楚如何比较描述符来告诉图像有多相似 ? 我知道这个问题,除非你以前真的玩过这些东西,否则这个问题是无法回答的,但是我认为以前做过这个的人可能会知道这个 ,于是我就提出了这个问题。 我做的小生成描述符: >> i=imread('p1.jpg'); >> j=imread('p2.jpg'); >> i=rgb2gray(i); >> j=rgb2gray(j); >> [a, b]=sift(i); % a has the frames and b has the descriptors >> [c, d]=sift(j);

全局匹配,排除所有的JS文件

我是gulp.js的新用户。 我想将我的所有非JavaScript文件移动到生成目录。 我现在所拥有的是: //Test copy gulp.task('test-copy', function() { gulp.src(['myProject/src/**/*.!(js|map|src)']) .pipe(gulp.dest('myProject/build')); }); //Results for various files myProject/css/style.css //Copied – GOOD myProject/html/index.html //Copied – GOOD myProject/js/foo.js //Not Copied – GOOD myProject/js/bar.min.js //Copied – BAD! myProject/js/jquery-2.0.3.min.js //Copied – BAD! myProject/js/jquery-2.0.3.min.map //Copied – BAD! 正如你所看到的,它只匹配在文件pathstring中的第一个点,而不是最后一个,如我所愿。 我怎样才能修改globsearchstring的行为,如我所愿?

在Scala中一次捕获多个exception

如何在Scala中一次捕获多个exception? 有没有比在C#中更好的方法: 一次捕获多个exception?

我如何比较scala中的两个数组?

val a: Array[Int] = Array(1,2,4,5) val b: Array[Int] = Array(1,2,4,5) a==b // false 有没有一种模式匹配的方式来查看两个数组(或序列)是否相等?