스칼라 프로젝트에 구성 구성 요소가 있습니다.케이크 패턴 : 인스턴스를 공유하는 방법은 무엇입니까?
분명히이 구성 요소의 인스턴스를 두 개 이상 갖고 싶지 않습니다. 나는 케이크 패턴을 사용하고 있습니다,하지만 난 내 요구 사항에 맞도록 조정할하는 방법을 잘 모르겠어요 :
// 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
의 익명 인스턴스?
당신이 뭔가 클래스 사이에 (하나 개의 모범에 존재하는, 즉 뭔가를) 공유하고자 할 경우 유형 넣어 : 이제 다음에 코드를 변경할 수있는, 좀 더 명확하게하려면 이 특성의 개체 및 액세스 개체 값이 혼합됩니다. –
고마워요, 나는 그것을 시도하고 "호환되지 않는 형식"오류가 있습니다 : https://gist.github.com/4693853 – stephanos
아래 주석 참조 너의 발췌 문장. 누군가가 "호환되지 않는 유형"오류를 설명 할 수있을 때까지 기다리지 만 일시적인 해결 방법으로는 잘 작동합니다. –