我正在努力实现一个DSL,除其他外,它允许我在上下文中包装一段代码。为简单起见,此示例中的上下文只是一个字符串。
由上下文包装的代码块可以包含任何内容,但也包含对 func1 的调用。现在,在func1中,我希望能够访问封闭上下文的ID。
def func1() = {
// Would like to access the context ID here
// i.e. "MY_CONTEXT"
}
def func2()(implicit x: String) = {
// Can access x here, but that would be "OTHER".
}
def context(id: String)(body: => Unit) = {
// How can body make use of id ?
body
}
implicit val c = "OTHER"
context("MY_CONTEXT") {
func1()
func2()
}
我已经研究过使用隐式参数。这可以用func2看到。但是,似乎需要在上下文调用之上声明这一点。这违背了目的,因为我只想用上下文调用来指定它。
我希望示例代码足以说明问题。关于如何保持上下文(id)(正文)构造如图所示的任何建议,并能够访问func1中的上下文ID?非常感谢您的帮助。