与えられた正規表現と文字列
val reg = "(a)(b)"
val str = "ab"
および対応するケース クラス
case class Foo(a: string, b: string)
正規表現を文字列と照合し、一致をケースクラスに適用しないようにするにはどうすればよいですか
Foo("a", "b")
最終的には?
与えられた正規表現と文字列
val reg = "(a)(b)"
val str = "ab"
および対応するケース クラス
case class Foo(a: string, b: string)
正規表現を文字列と照合し、一致をケースクラスに適用しないようにするにはどうすればよいですか
Foo("a", "b")
最終的には?
文字列内の正規表現を検索し、その結果を に割り当てた結果に対するパターン マッチFoo
。Regexの APIドキュメントにも同様の例があります。
scala> val reg = "(a)(b)".r
reg: scala.util.matching.Regex = (a)(b)
scala> val str = "ab"
str: String = ab
scala> case class Foo(a: String, b: String)
defined class Foo
scala> val foo = reg.findFirstIn(str) match{
| case Some(reg(a,b)) => new Foo(a,b)
| case None => Foo("","")
| }
foo: Foo = Foo(a,b)
scala> foo.a
res2: String = a
scala> foo.b
res3: String = b
一致に問題がないことが確実な場合は、関数をカリー化して、foldleft を使用して、抽出された引数のリストにこのバージョンを適用できます。
> val reg = "(a)(b)".r
> val str = "ab"
> val f1 = (Foo.apply _).curried
// f1 : String => String => Foo
> val groups = reg.findFirstMatchIn(str).get.subgroups
// groups: List[String]
> val foo = ((f1 : Any) /: groups) { case (f: (String => Any), s) => f(s)} asInstanceOf[Foo]
foo: Foo = Foo(a,b)
curried の定義については、Scala のFunction2を参照してください。