【发布时间】:2013-02-01 18:45:07
【问题描述】:
我的 Scala 项目中有一个配置组件。
显然我不想拥有多个该组件的实例。我正在使用 cake pattern,但我不确定如何调整它以满足我的要求:
// Library
// =================================================
trait ConfigComp {
trait Config {
def get(k: String): String
}
def config: Config
}
trait QueueComp {
self: ConfigComp =>
class Queue {
val key = config.get("some-key")
}
lazy val queue = new Queue
}
// Application
// =================================================
trait MyConfig extends ConfigComp {
lazy val config = new Config {
println("INITIALIZING CONFIG")
def get(k: String) = "value"
}
}
object Frontend extends QueueComp with MyConfig
object Backend extends QueueComp with MyConfig
Frontend.queue.key
Backend.queue.key
打印:
INITIALIZING CONFIG
INITIALIZING CONFIG
如何让蛋糕图案分享Config的匿名实例?
【问题讨论】:
-
如果您希望在类之间共享某些东西(即仅存在于一个示例中的东西),请将其放入对象中并从将要混入的该特征中访问对象值。
-
谢谢,我试过了,但遇到了“类型不兼容”的错误:gist.github.com/4693853
-
查看您的 sn-p 下方的评论。如果有人可以解释“具有不兼容的类型”错误,我仍然会等待,但作为一种临时解决方法,这应该会很好。
-
感谢您的帮助!
-
在您的要点中,您可以通过将
def config: Config更改为def config: ConfigComp#Config来使嵌套特征起作用。寻找 scala 的路径相关类型(例如看这个问题:stackoverflow.com/questions/2183954/…)。
标签: scala cake-pattern