Scala模式在构造函数上匹配参数,但也重用对象

Scala模式在构造函数上匹配参数,但也重用对象,scala,pattern-matching,Scala,Pattern Matching,我使用了一个match语句来匹配一个特定的构造函数,同时也使用了case右侧的对象。e、 例如,在下面的示例中,我想在右侧使用MyClass的对象,但我不知道如何引用它 match x { case MyClass(a1)::remainingList => ? case ... } 将匹配项指定给一个值以供以后参考,如中所示 case f: Foo => foo.bar 或者,如果要匹配的是一个case类,则可以将其解包为一个元组,如: case (foo, bar) =&

我使用了一个match语句来匹配一个特定的构造函数,同时也使用了case右侧的对象。e、 例如,在下面的示例中,我想在右侧使用
MyClass
的对象,但我不知道如何引用它

match x {
 case MyClass(a1)::remainingList => ?
 case ...
}

将匹配项指定给一个值以供以后参考,如中所示

case f: Foo => foo.bar
或者,如果要匹配的是一个case类,则可以将其解包为一个元组,如:

case (foo, bar) => foo + bar
如果只想将head与特定类匹配,可以将head传递到match语句中,而不是整个列表中

myList.head match {
  case f: Foo => f.bar
}

将匹配项指定给一个值以供以后参考,如中所示

case f: Foo => foo.bar
或者,如果要匹配的是一个case类,则可以将其解包为一个元组,如:

case (foo, bar) => foo + bar
如果只想将head与特定类匹配,可以将head传递到match语句中,而不是整个列表中

myList.head match {
  case f: Foo => f.bar
}

我想只有用list.head才有可能

  case class MyClass(s: String)

  val seq = Seq(MyClass("a"), MyClass("b"))

  seq match {
    case my @ MyClass(s) :: xs => println(my.head)
  }

我想只有用list.head才有可能

  case class MyClass(s: String)

  val seq = Seq(MyClass("a"), MyClass("b"))

  seq match {
    case my @ MyClass(s) :: xs => println(my.head)
  }

@Kocko我正在匹配一个列表。我想把它的头匹配到一个特定的类。不知道你的具体用例是很困难的,但是如果你只使用列表的头,我会倾向于像我的第三个例子中那样明确地匹配头。@Kocko我正在匹配一个列表。我想把它的头和一个特定的类相匹配。不知道你的具体用例是很困难的,但是如果你只使用列表的头,我会倾向于像我的第三个例子那样明确地匹配头。
my
在这里是无用的。如果你有seq(MyClass(“a”),“b”)(seq[Any]),你可以简单地调用
seq.head
,如果你需要检查类型,它仍然很有用
my
在这里是无用的。如果您有seq(MyClass(“a”),“b”)(seq[Any]),您可以简单地调用
seq.head
,如果您需要检查类型,它仍然很有用