标签: pattern-matching

为什么 case 表达式在此 Elm 代码中不起作用?

我编写了一个 Elm 代码片段,它会绘制一个正方形,并在每次单击鼠标时在红色和黑色之间更改正方形颜色。

然而,changeColor函数中的case结构不能按预期工作,而使用if结构实现的changeColor可以工作。

我应该怎么做才能找出问题所在?谢谢。

import Color exposing (red, black, blue, Color)
import Signal exposing ((<~))
import Graphics.Element exposing (Element, show)
import Graphics.Collage exposing (collage, square, filled, Form)
import Mouse
import Window

main : Signal Element
main = 
  scene <~ (Signal.foldp changeColor black Mouse.clicks)

scene : Color -> Element
scene color = 
  collage 600 600 [ filled_square color ]

changeColor : () -> Color -> Color
changeColor _ color =
  case color of …
Run Code Online (Sandbox Code Playgroud)

syntax pattern-matching elm

1
推荐指数
1
解决办法
1296
查看次数

负向前瞻正则表达式在 Java 中不起作用

以下正则表达式在此处测试时成功运行,但是当我尝试将其实现到我的 Java 代码中时,它不会返回匹配项。它使用负前瞻来确保MAIN LEVEL和之间不会出现换行符Bedrooms。为什么它在 Java 中不起作用?

正则表达式

^\s*\bMAIN LEVEL\b\n(?:(?!\n\n)[\s\S])*\bBedrooms:\s*(.*)

爪哇

pattern = Pattern.compile("^\\s*\\bMAIN LEVEL\\b\\n(?:(?!\\n\\n)[\\s\\S])*\\bBedrooms:\\s*(.*)");
    match = pattern.matcher(content);      
    if(match.find())
    {
        //Doesn't reach here
        String bed = match.group(1);
        bed = bed.trim();
    }
Run Code Online (Sandbox Code Playgroud)

content 只是从文本文件读取的字符串,其中包含上面链接的演示中显示的确切文本。

File file = new File("C:\\Users\\ME\\Desktop\\content.txt"); 
 content = new Scanner(file).useDelimiter("\\Z").next();
Run Code Online (Sandbox Code Playgroud)

更新:

我更改了代码以包含多行修饰符(?m),但它打印出“null”。

pattern = Pattern.compile("(?m)^\\s*\\bMAIN LEVEL\\b\\n(?:(?!\\n\\n)[\\s\\S])*\\bBedrooms:\\s*(.*)");
    match = pattern.matcher(content);
    if(match.find())
    {   // Still not reaching here
        mainBeds=match.group(1);
        mainBeds= mainBeds.trim();
    }
  System.out.println(mainBeds);     // Prints null
Run Code Online (Sandbox Code Playgroud)

java regex pattern-matching regex-lookarounds

1
推荐指数
1
解决办法
1206
查看次数

我可以创建针对实现 Pattern 的泛型类型的匹配吗?

我认为如果我能算出生命周期符号,这可能会起作用,我错了吗?

pub fn from<T:Pattern>(from: T) -> Result<Tag, &'static str> {
    match from {
        'A'|"A" => Ok(Tag::ChA),
        'B'|"B" => Ok(Tag::ChB),
        'C'|"C" => Ok(Tag::ChC),
        'D'|"D" => Ok(Tag::ChD),
        'T'|"Tmpr" => Ok(Tag::Tmpr),
        'Y'|"Batt" => Ok(Tag::Batt),
        'L'|"Acc" => Ok(Tag::Acc),
        _ => Err("Error: unknown channel"),
    }
}
Run Code Online (Sandbox Code Playgroud)

generics pattern-matching rust

1
推荐指数
1
解决办法
994
查看次数

如何只匹配垂直制表符?

我正在尝试删除垂直制表符。我尝试过使用\v,但这似乎也匹配换行符:

$str =~ s/\v/ /;

如何在 perl 中仅匹配垂直制表符?

regex perl pattern-matching

1
推荐指数
1
解决办法
2744
查看次数

如何让 python 的“in”运算符只产生真正的单词匹配,而不仅仅是子字符串匹配?

这是所需的输出:

"bacillus thurungensis" in "bacillus thurungensis"
TRUE

"bacillus thurungensis" in "Sentence containing bacillus thurungensis."
TRUE

"bacillus thurungensis" in "Subspecies bacillus thurungensis34"
FALSE

"bacillus thurungensis" in "bacillus thurungensis, bacillus genus"
TRUE

"bacillus thurungensis" in "Notbacillus thurungensis, must match word"
FALSE
Run Code Online (Sandbox Code Playgroud)

Python 通常认为任何子字符串匹配都是好的,但我并不是在寻找这一点。我希望某些正则表达式或匹配运算符仅当且仅当它将查询视为主题中的单独单词而不仅仅是子字符串时才产生 true。这怎么能实现呢?

python regex substring pattern-matching string-matching

1
推荐指数
1
解决办法
2197
查看次数

仅使用 sed 在第一个匹配后添加一行

我正在使用 sed 并且我有一个文件包含

苹果
橙子
香蕉
橙子

我只想在第一个橙子之后插入“梨”。所以输出应该是这样的

苹果
橙子

香蕉
橙子

我使用了这个 sed 选项:

sed -i '0,/orange/a pear' 文件名

但这给了我这样的输出:

苹果

橙子

香蕉
橙子

bash sed pattern-matching

1
推荐指数
1
解决办法
3488
查看次数

了解具有两个成员的案例类的 Scala 匹配

我使用 Scala 一段时间了,但它仍然给我带来很多麻烦。我不知道他们为什么把事情搞得这么复杂。当该案例类只有两个成员时,我试图理解匹配的案例类

def main(args: Array[String]): Unit = {

    case class X(a: String, i: Int)
    def doSome(x: X): Unit = {
      x match {
        case "x" X 1 => print("ahhh") // <---- HERE ! 
        case X(_, _) => println("")
      }
    }

    doSome(X("x", 1))


    case class Y(a: String, i: Int, j: Int)

    def doAnother(y:Y): Unit = {
      y match {
        case "y" X 1 => print("ahhh") // how to make similar syntax when there are more than one syntax ?
        case …
Run Code Online (Sandbox Code Playgroud)

scala pattern-matching

1
推荐指数
1
解决办法
359
查看次数

在 F# 中,如何修复值类型“a-&gt;'b-&gt;Model”的模式匹配错误

(我是 F# 新手)。我在 F# 中有以下定义:

init i j =
    { Id = Guid.NewGuid ()
      InnerRows = [0 .. 2] |> List.map (Cell.init i j) 
      SelectedInnerRow = None}

 let update msg m =
    match msg with
    | Select id -> { m with SelectedInnerRow = id }
    | Reset -> init
Run Code Online (Sandbox Code Playgroud)

其中更新函数在“重置 -> 初始化”上显示以下错误: 模式匹配表达式的所有分支必须返回与第一个分支相同类型的值,其中此处为“模型”。该分支返回类型为 ''a -> 'b -> Model' 的值

“a -> 'b -> Model”是什么意思,如何解决这个问题?

谢谢。

TIA

f# pattern-matching

1
推荐指数
1
解决办法
565
查看次数

类似于列表的自定义数据构造函数的模式匹配

我有一个如下定义的数据构造函数:

data Stack a = Empty | NonEmpty a (Stack a)
         deriving (Show, Read, Eq)
Run Code Online (Sandbox Code Playgroud)

然后我有一个将其与模式匹配一​​起使用的函数:

func :: Stack a -> a
func (Stack.NonEmpty val Stack.Empty) = ...
func (Stack.NonEmpty val1 (Stack.NonEmpty val2 Stack.Empty)) = ...
Run Code Online (Sandbox Code Playgroud)

我想做的是使用类似序列或列表的操作符进行模式匹配,如下所示:

func :: Stack a -> a
func (val :> Stack.Empty) = ...
func (val1 :> val2 :> Stack.Empty) = ...
Run Code Online (Sandbox Code Playgroud)

我知道它实际上不是一个运算符,而是一个数据构造函数,看起来像一个运算符,但我无法使其工作。

几周前我也开始学习 Haskell。

haskell pattern-matching

1
推荐指数
1
解决办法
96
查看次数

什么是 C# 对象模式匹配?

我知道 C# 中的模式匹配类似于:

if (x is TypeY y)
{
  // do thing...
}
Run Code Online (Sandbox Code Playgroud)

这或多或少相当于:

if (x is TypeY)
{
  var y = (TypeY)x;
  // do thing...
}
Run Code Online (Sandbox Code Playgroud)

但是,我在编写 IntelliSense 建议的代码时发现了一些东西。我有以下代码:

if (top is { } t)
{
  // do stuff if 'top' is NOT NULL
}
Run Code Online (Sandbox Code Playgroud)

本来我以为我能做到if (top is not null t),结果却做不到;然后我转向if (top is int t),就在那时我提出了这个建议。这是什么意思?它是如何工作的?我只在 switch 语句中的模式匹配方面见过它,例如:

class Point
{
  public int X { get; set; }
  public int Y { get; set; }
} …
Run Code Online (Sandbox Code Playgroud)

c# casting pattern-matching

1
推荐指数
1
解决办法
729
查看次数