У меня есть приложение scala (2.10.4), где адреса электронной почты передаются по большому счету, и я хотел бы реализовать абстракцию, вызываемую в IO, для "дезинфекции" уже проверенных адресов электронной почты.
Использование scala.Proxy
- это почти то, что я хочу, но я сталкиваюсь с проблемами с асимметричным равенством.
class SanitizedEmailAddress(s: String) extends Proxy with Ordered[SanitizedEmailAddress] {
val self: String = s.toLowerCase.trim
def compare(that: SanitizedEmailAddress) = self compareTo that.self
}
object SanitizedEmailAddress {
def apply(s: String) = new SanitizedEmailAddress(s)
implicit def sanitize(s: String): SanitizedEmailAddress = new SanitizedEmailAddress(s)
implicit def underlying(e: SanitizedEmailAddress): String = e.self
}
Я хотел бы иметь
val sanitizedEmail = SanitizedEmailAddress("[email protected]")
val expected = "[email protected]"
assert(sanitizedEmail == expected) // => true
assert(expected == sanitizedEmail) // => true, but this currently returns false :(
Или что-то с аналогичной функциональностью. Есть ли какой-нибудь не громоздкий способ сделать это?
assert(sanitizedEmail.self == expected) // => true (but pretty bad, and someone will forget)
// can have a custom equality method and use the "pimp-my-lib" pattern on strings, but then we have to remember to use that method every time
Спасибо за вашу помощь.