Я стараюсь избегать повторения длинных квазикавычек в матчах. Итак, я хотел бы преобразовать это:
def appendTree(clazz: ClassDef, tree: Tree): ClassDef =
clazz match {
case q"$mods class $tpname[..$tparams] $ctorMods(...$paramss) extends { ..$earlydefns } with ..$parents { $self => ..$stats }" =>
q"$mods class $tpname[..$tparams] $ctorMods(...$paramss) extends { ..$earlydefns } with ..$parents { $self => ..$stats; ..$tree }"
}
к чему-то вроде этого:
val clazzQuote = "$mods class $tpname[..$tparams] $ctorMods(...$paramss) extends { ..$earlydefns } with ..$parents { $self => ..$stats }"
def appendTree(clazz: ClassDef, tree: Tree): ClassDef =
clazz match {
case q"$clazzQuote" =>
q"$mods class $tpname[..$tparams] $ctorMods(...$paramss) extends { ..$earlydefns } with ..$parents { $self => ..$stats; ..$tree }"
}
Сравнимый пример того, что я пытаюсь сделать с интерполяцией строк:
val msg = "hello $name"
"hello world" match {
case s"$msg" => println(name) // I want this to output "world"
}
Этот пример также не работает.
Как я могу это сделать? (или можно?)