Синтаксис соответствия шаблонов Scala - PullRequest
6 голосов
/ 05 июля 2011

Недавно я играл с сопоставлением с шаблоном scala, и мне было интересно, есть ли способ создать экстрактор внутри оператора case. Следующий код работает, но вы должны сначала определить экстрактор и присвоить ему значение val:

val Extr = "(.*)".r
"test" match {
  case Extr(str) => println(str)
}

То, что я хотел бы сделать, или то, что я хотел бы, чтобы кто-то подтвердил, невозможно, выглядит примерно так:

"test" match {
  case ("(.*)".r)(str) => println(str)
}

РЕДАКТИРОВАТЬ: В случае, если кто-то из команды Scala читает это: Будет ли возможно реализовать это?

Ответы [ 2 ]

5 голосов
/ 05 июля 2011

К сожалению, это невозможно, и я не вижу способа упростить ваш первый пример.

За оператором case должен следовать Pattern . Спецификация языка Scala показывает BNF шаблонов в разделе 8.1.Грамматика шаблонов довольно мощная, но на самом деле это просто шаблон, здесь не допускаются вызовы методов или конструкторы.

0 голосов
/ 07 сентября 2015

У меня была похожая проблема, и я решил ее так:

case x if x.matches("regex") => foo(x)

Я не знаю, если это именно то, что вы хотите, но это работает

...