Я следующее регулярное выражение с сопоставления с образцом:Scala: регулярное выражение непосредственно в согласующего шаблон блока
val url = "/en/about"
val langRegex = "/(.{2}).*".r
val lang = url match {
case langRegex(lang) => lang
case _ => "en"
}
Но я хочу, чтобы добиться чего-то вроде этого (я не хочу, чтобы создать дополнительную переменную для регулярных выражений, но вместо того, чтобы поместить он непосредственно в соответствующем блоке)
val url = "/en/about"
val lang = url match {
case "/(.{2}).*".r(lang) => lang
case _ => "en"
}
Я получаю ошибку компилятора во втором случае? Я только что подставил langRegex (lang) с "/(.{2}).*".r, это выражение должно быть равным, не так ли?
Почему это ошибка?
Дело в том, что вы просто не можете этого сделать, вам нужен предварительно скомпилированный шаблон. То, что вы можете сделать, это либо использовать 'if' внутри, либо использовать некоторые манипуляции с строкой, если строка соответствует вашему регулярному выражению, или просто используйте более простой код, например, в http://ideone.com/CJMS1A –
Или используйте [' case s if url .matches ("/ (. {2}). *") => s.replaceFirst ("/(.{2}).*", "$ 1") '] (http://ideone.com/dqlW4z) , –