squants
squants copied to clipboard
Currencies don't compare correctly when defined inside a trait
Hello! We've hit some problems in our code when defining a currency in one of our base traits:
trait ConvenientStuffWeUseEverywhere {
object OurCurrency extends squants.market.Currency(...)
}
class ServiceA extends ConvenientStuffWeUseEverywhere {
val someMoney = Money(100, OurCurrency)
}
class ServiceB extends ConvenientStuffWeUseEverywhere {
val otherMoney = Money(100, OurCurrency)
}
Interestingly because OurCurrency is defined in a trait that is extended twice, ServiceA and ServiceB both end up with a freshly created instance of OurCurrency. This causes ServiceA.someMoney == ServiceB.otherMoney to be false in our tests!
We've fixed our specific case by overriding equals and hashcode in OurCurrency, but it might be something that should be Currency to avoid having to override it for every currency you define.
Thanks!