Tag: 模式匹配

“x is null”和“x == null”有什么区别?

在C#7中我们可以使用 if (x is null) return; 代替 if (x == null) return; 使用新的方法(前面的例子)比旧的语法有什么优点吗? 语义有什么不同? 只是一个品味的问题? 如果不是,何时使用这个或另一个。 参考 。

与连词模式匹配(PatternA AND PatternB)

Scala有一种语言function来支持模式匹配中的不连续(“模式select”): x match { case _: String | _: Int => case _ => } 但是,如果审查满足PatternA 和 PatternB(连词),我经常需要触发一个动作。 我创build了一个模式组合器“&&”,增加了这个function。 三条小提醒我为什么爱Scala! // Splitter to apply two pattern matches on the same scrutiny. object && { def unapply[A](a: A) = Some((a, a)) } // Extractor object matching first character. object StartsWith { def unapply(s: String) = s.headOption […]

如何在Scala中匹配多个值?

比方说,我想要使用相同的代码处理来自远程服务的多个返回值。 我不知道如何在Scala中expression这一点: code match { case "1" => // Whatever case "2" => // Same whatever case "3" => // Ah, something different } 我知道我可以使用Extract Method并调用它,但是在调用中仍然存在重复。 如果我使用Ruby,我会这样写: case code when "1", "2" # Whatever when "3" # Ah, something different end 请注意,我简化了这个例子,因此我不想在正则expression式或其他types上进行模式匹配。 匹配值实际上是复杂的值。

x?.y?.z是什么意思?

C#中的模式匹配草稿包含以下代码示例: Type? v = x?.y?.z; if (v.HasValue) { var value = v.GetValueOrDefault(); // code using value } 我明白Type? 表示Type可为空,但假设x , y和z是本地的,那么x?.y?.z是什么意思?

榆木编译器永远运行,电脑刚刚变热

我不确定是什么原因导致了这个问题,但是在一个项目中,我正在编译,编译器花了几个小时才编译一个模块。 我的代码库的总大小是352KB,但是没有一个模块超过10KB。 我正在使用一个本地端口,但它是非常微不足道的; 我只是Date.now() 。 有没有什么会令榆树编译器永久编译的知名度? 我没有很多的依赖,但我使用Html很多。 我真的很感激任何暗示,什么会导致这一点。 编辑 所以原来大的expression式会导致优化器花费很长时间,从0.16开始。 这里是关于榆树讨论提出这个问题的讨论 ,以及这个讨厌的案例匹配的主旨 。 我认为是冗长的,为了保持胡萝卜的外观,为什么榆木的编译器会采用这种方式进行大小写匹配? 底层机器在这里发生了什么? 为什么编译器花费超过一个小时的时间来优化案例陈述上的60多个模式匹配?

Ruby Regexp组匹配,在1行上分配variables

我目前正试图将一个string重新映射到多个variables。 示例string: ryan_string = "RyanOnRails: This is a test" 我用这个正则expression式匹配它,有3个组: ryan_group = ryan_string.scan(/(^.*)(:)(.*)/i) 现在要访问每个组,我必须做这样的事情: ryan_group[0][0] (first group) RyanOnRails ryan_group[0][1] (second group) : ryan_group[0][2] (third group) This is a test 这看起来很荒谬,感觉就像我做错了什么。 我希望能够做到这样的事情: g1, g2, g3 = ryan_string.scan(/(^.*)(:)(.*)/i) 这可能吗? 还是有比我更好的方法吗?

为什么Scala中的模式匹配不能和variables一起工作?

采取以下function: def fMatch(s: String) = { s match { case "a" => println("It was a") case _ => println("It was something else") } } 这种模式很好匹配: scala> fMatch("a") It was a scala> fMatch("b") It was something else 我想能够做的是以下几点: def mMatch(s: String) = { val target: String = "a" s match { case target => println("It was" […]

在scala中匹配多个case类

我正在对一些案例类进行匹配,并希望以相同的方式处理两个案例。 像这样的东西: abstract class Foo case class A extends Foo case class B(s:String) extends Foo case class C(s:String) extends Foo def matcher(l: Foo): String = { l match { case A() => "A" case B(sb) | C(sc) => "B" case _ => "default" } } 但是当我这样做,我得到的错误: (fragment of test.scala):10: error: illegal variable in pattern alternative […]

function语言中的“模式匹配”是什么?

我正在阅读函数式编程,而且我注意到, 模式匹配在许多文章中被提及为函数式语言的核心特性之一。 有人可以解释一个Java / C ++ / JavaScript开发者是什么意思?

如何在Scala中使用正则expression式进行模式匹配?

我希望能够find一个单词的第一个字母和一个组中的一个字母,如“ABC”之间的匹配。 在伪代码中,这可能看起来像这样: case Process(word) => word.firstLetter match { case([ac][AC]) => case _ => } } 但是,如何获取Scala中的第一个字母,而不是Java呢? 如何正确expression正则expression式? 是否有可能在一个案例课中做到这一点?