使用 lambdas 擴充套件

如果你有:

operator fun <R> String.invoke(block: () -> R) = {
  try { block.invoke() }
  catch (e: AssertException) { System.err.println("$this\n${e.message}") }
}

你可以編寫以下類似 DSL 的程式碼:

"it should return 2" {
   parse("1 + 1").buildAST().evaluate() shouldBe 2
}

如果你對上面的 shouldBe 感到困惑,請參閱示例 Infix approach to build DSL