가정하자 나는스칼라에서 클래스 내의 변수에 특성을 "통과"시키는 방법이 있습니까?
trait NYSE extends Market {
override def getCurrency = "USD"
}
가 지금은 통화를 알아야 할 필요가있는 상인 클래스가 있다고 가정 시장 통화를 검색 할 수있는 특성 NYSE 있습니다. 쉬운 :
val trader = new Trader with NYSE
그러나 상인 내 생각 나는
val Database = new Database
같은 뭔가를하지만
다음과 같이 정말val trader = new Trader with NYSE
자동으로 내부 변수를 초기화합니다 있도록 시장 정보를 전달하려면
val Database = new Database with NYSE
마찬가지로
val trader = new Trader with LSE
자동으로이를 달성 할 수있는 방법이 있나요
val Database = new Database with LSE
합니까?
이trait Currency[T] { def get: String }
trait DatabaseProvider[T] { def get: String }
object Markets {
trait NYSE
implicit case object NYSECurrency extends Currency[NYSE] {
def get = "USD"
}
implicit case object NYSEDBProvider extends DatabaseProvider[NYSE] {
def get = "NYSE_DB"
}
}
class Trader[T](
implicit val currency: Currency[T],
val dbProvider: DatabaseProvider[T]
) {
def getCurrency = currency.get
def getDatabase = dbProvider.get
}
object Demo extends App {
import Markets._
val trader = new Trader[NYSE]
println(trader.getCurrency)
println(trader.getDatabase)
}
당신은 당신이 원하는만큼의 시장을 추가 할 수 있으며 완전히 다른 구현을 풀다 :
데이터베이스에서 다음과 같이하고 싶다고 가정 해 보겠습니다. def myFunction {val currency = getCurrency}. 이 작업을 수행 할 수 있습니까? – deltanovember
@deltanovember - 내가 아는 한, 서면으로 작성한 것이 아닙니다. –