私は Scala の柔軟性と簡潔さをとても気に入っています。この金額の定義では、次のようになります。
case class MoneyAmount(amount: Double, currency: Currency)
trait Currency
case object EUR extends Currency
case object USD extends Currency
インスタンスを簡単に作成できます。
val m1 = MoneyAmount(100, EUR)
スコープ内の次の定義を使用すると、さらに簡単になります。
implicit class DoubleMoney(amount: Double) {
def apply(currency: Currency) = MoneyAmount(amount, currency)
}
val m2 = 100 (EUR)
val m3 = 100 (USD)
私の質問は次のとおりです。次のことが可能になる方法はありますか:
val m3 = 100 EUR // does not compile!
各通貨 (EUR、USD など) の関数を定義せずに?