gpt4 book ai didi

scala - 宏采用类主体,消除显式新运算符?

转载 作者:行者123 更新时间:2023-12-01 11:04:57 25 4
gpt4 key购买 nike

我从来都不喜欢 Scala 中的 new 运算符,尤其是对于 DSL。构建没有 new 的对象的变通方法通常很丑陋。例如,如果您导入 scala.actors.Actor._,您有 actor { ... },但在体内您无法访问 this: Actor,所以那个对象里面也有各种伪实例方法,比如receive, react, self

使用 Scala 2.10 宏,我想知道是否有机会实现以下功能?

object Button {
def apply(body: ? ): Button = macro applyImpl(body)
def applyImpl(c: Context)(body: c.Expr[ ? ]): c.Expr[Button] = ?
}
trait Button {
def text: String
def text_=(s: String): Unit
def doSomething(): Unit
}

Button {
text = "test"
doSomething()
}

作为额外的挑战,如果 doSomething 受到保护 会怎样?

最佳答案

我认为这行不通,因为

{
text = "test"
doSomething()
}

不会编译,因为在 Button 特性之外没有 textdoSomething() 方法。宏目前只能用于已经过类型检查的表达式。

关于scala - 宏采用类主体,消除显式新运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12130002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com