Guest User

Untitled

a guest
May 5th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.94 KB | None | 0 0
  1. trait InterpolationContext {
  2. implicit def str2interp(s: String) = new InterpolatedString(s)
  3.  
  4. class InterpolatedString(val s: String) {
  5. def / = interpolate(s)
  6. def identifier = s.substring(2, s.length - 1)
  7. }
  8.  
  9. object Tokenizer {
  10. def unapply(s: String): Option[Iterator[String]] = {
  11. Some("\\$\\{.+?\\}".r.findAllIn(s).matchData.map { (x) => x.matched })
  12. }
  13. }
  14.  
  15. def interpolate(s: String) = {
  16. var sb = s
  17. def evaluate(token:String):String = {
  18. try {
  19. val method = this.getClass.getMethod(token.identifier)
  20. method.invoke(this).toString
  21. } catch {
  22. case _: NoSuchMethodException => token
  23. }
  24. }
  25. s match {
  26. case Tokenizer(tokens) => tokens.foreach { (x:String) => sb = sb.replace(x, evaluate(x)) }
  27. }
  28. sb
  29. }
  30. }
  31.  
  32. object Test extends InterpolationContext {
  33. val a = "3"
  34. def main(args: Array[String]) {
  35. println("expanded: ${a}; not expanded: ${b}; more text"/)
  36. }
  37. }
Add Comment
Please, Sign In to add comment