Макрос Scala для печати кода?

Я хочу сделать что-то вроде этого:

def assuming[A](condition: => Boolean)(f: => A): A = {
  require(condition, /* print source-code of condition */)
  f
}

Пример использования:

def fib(n: Int) = n match { // yes, yes, I know this is not efficient
  case 0 => 0 
  case 1 => 1
  case i => assuming(i > 0) { fib(i-1) + fib(i-2) }
}

Теперь, например, если вы звонитеfib(-20)Я хочу, чтобы это выдало исключение с сообщениемAssertion failed: -20 > 0 или жеAssertation failed: i > 0

Ответы на вопрос(3)

Ваш ответ на вопрос