私は市場の通貨にScalaでは、クラス内の変数に特性を「パススルー」する方法はありますか?
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 - 私が知っている限りではなく、書いたとおりではありません。 –