Tag: 模式匹配

Scala中的模式匹配如何在字节码级别实现?

Scala中的模式匹配如何在字节码级别实现? 它是否就像一系列if (x instanceof Foo)构造,还是其他的? 它的性能影响是什么? 例如,给定以下代码(来自Scala示例页面46-48), eval方法的等效Java代码将如何显示? abstract class Expr case class Number(n: Int) extends Expr case class Sum(e1: Expr, e2: Expr) extends Expr def eval(e: Expr): Int = e match { case Number(x) => x case Sum(l, r) => eval(l) + eval(r) } PS我可以读取Java字节码,所以一个字节码表示对我来说就足够了,但是对其他读者来说可能会更好地知道它是怎么样的Java代码。 PPS Scala编程书籍是否给出了有关Scala如何实现的类似问题的答案? 我已经订购了这本书,但还没有到。

在Scala的模式匹配系统中使用比较运算符

在Scala中使用模式匹配系统进行比较可以匹配吗? 例如: a match { case 10 => println("ten") case _ > 10 => println("greater than ten") case _ => println("less than ten") } 第二种情况是非法的,但我希望能够指出“何时比a大”。

计算string中的字符出现次数

如何计算像"bla_bla_blabla_bla"这样的string中的"_"的数量?

如何判断一个string是否在Python中重复?

我正在寻找一种方法来testing给定的string是否重复整个string本身或不。 例子: [ '0045662100456621004566210045662100456621', # '00456621' '0072992700729927007299270072992700729927', # '00729927' '001443001443001443001443001443001443001443', # '001443' '037037037037037037037037037037037037037037037', # '037' '047619047619047619047619047619047619047619', # '047619' '002457002457002457002457002457002457002457', # '002457' '001221001221001221001221001221001221001221', # '001221' '001230012300123001230012300123001230012300123', # '00123' '0013947001394700139470013947001394700139470013947', # '0013947' '001001001001001001001001001001001001001001001001001', # '001' '001406469760900140646976090014064697609', # '0014064697609' ] 是重复自己的string, [ '004608294930875576036866359447', '00469483568075117370892018779342723', '004739336492890995260663507109', '001508295625942684766214177978883861236802413273', '007518796992481203', '0071942446043165467625899280575539568345323741', '0434782608695652173913', '0344827586206896551724137931', '002481389578163771712158808933', '002932551319648093841642228739', '0035587188612099644128113879', '003484320557491289198606271777', '00115074798619102416570771', ] 是那些没有的例子。 我给出的string的重复部分可以是相当长的,而string本身可以是500或更多的字符,所以循环遍历每个字符试图build立一个模式,然后检查模式与string的其余部分似乎是非常缓慢。 […]

我怎样才能检查一个二维NumPy数组里面是否包含一个特定的数值模式?

我有一个大的NumPy.array field_array和一个较小的数组match_array ,都包含int值。 使用以下示例,如何检查field_array的任何match_array形状段field_array包含与field_array中的值完全对应的值? import numpy raw_field = ( 24, 25, 26, 27, 28, 29, 30, 31, 23, \ 33, 34, 35, 36, 37, 38, 39, 40, 32, \ -39, -38, -37, -36, -35, -34, -33, -32, -40, \ -30, -29, -28, -27, -26, -25, -24, -23, -31, \ -21, -20, -19, -18, -17, -16, […]

如何模式匹配在Scalagenericstypes?

假设我们有一个generics类Container : case class Container[+A](value: A) 然后,我们想模式匹配一​​个Container与一个Double和任何Container : val double = Container(3.3) var container: Container[Any] = double 要做到这一点,我们通常会写: container match { case c: Container[String] => println(c.value.toUpperCase) case c: Container[Double] => println(math.sqrt(c.value)) case _ => println("_") } 然而,编译器给出了两个警告,其中前两个是每个警告。 例如,第一个警告说:“types模式Container [String]中的非variablestypes参数String未被选中,因为它被擦除”。 由于擦除,在运行时不可能区分不同types的容器,并且第一次捕获将匹配。 因此, Container[Double]types的Container[Double]将被第一个与Container[String]对象相匹配的case匹配,所以toUpperCase方法将在Double上被调用,并抛出java.lang.ClassCastException 。 如何匹配由特定types参数化的Container ?

如何检测string列表中的常见子string

给定一组string,例如: EFgreen EFgrey EntireS1 EntireS2 J27RedP1 J27GreenP1 J27RedP2 J27GreenP2 JournalP1Black JournalP1Blue JournalP1Green JournalP1Red JournalP2Black JournalP2Blue JournalP2Green 我想能够检测到这些是三组文件: EntireS [1,2] J27 [红色,绿色] P [1,2] JournalP [1,2] [红,绿,蓝] 是否有任何已知的方法来解决这个问题 – 我可以阅读的任何已发表的论文? 我正在考虑的方法是为每个string查看所有其他string,并查找常用字符以及不同字符的位置,试图查找具有最多共同string的string,但是我担心这不是非常有效,可能会给误报。 请注意,这与“如何检测文件名中的常用string组”是不一样的,因为它假定一个string总是有一系列的数字。

如何检查给定的c + +string或字符*只包含数字?

或者从相反的方向find第一个非数字字符。 相同的函数是否适用于string和char *?

Haskell:parsing模式中的错误

谁喜欢告诉我这个代码有什么问题(在语法上)? — merge two sorted lists mergeX [] b res = b ++ res mergeX a [] res = a ++ res mergeX a:as b:bs res | a > b = mergeX as b:bs a:res | otherwise = mergeX a:as bs b:res 解释: 分析模式中的错误:mergeX

如何覆盖在案例类同伴中的应用

所以情况就是这样。 我想定义一个case类如下所示: case class A(val s: String) 我想定义一个对象来确保当我创build类的实例时,“s”的值总是大写,如下所示: object A { def apply(s: String) = new A(s.toUpperCase) } 然而,这是行不通的,因为Scala抱怨apply(s:String)方法被定义了两次。 我明白,案例类语法会自动为我定义,但不是有另一种方式,我可以实现这一目标吗? 我想坚持案例类,因为我想用它来进行模式匹配。