class PasswordCaseClass(val password:String)
trait PasswordTrait { self:PasswordCaseClass =>
override def password = "blue"
}
val o = new PasswordCaseClass("flowers") with PasswordTrait
¿Es posible anular PasswordCaseClass
's password
con lo dispuesto en PasswordTrait
? En este momento, recibo este error:¿Puedo anular un método de clase scala con un método de un rasgo?
e.scala:6: error: overriding value password in class PasswordCase
Class of type String;
method password in trait PasswordTrait of type => java.lang.String needs to be a stable,
immutable value
val o = new PasswordCaseClass("flowers") with PasswordTrait
^
one error found
Me gustaría ser capaz de tener algo como esto:
class User(val password:String) {
}
trait EncryptedPassword { u:User =>
def password = SomeCriptographyLibrary.encrypt(u.password)
}
val u = new User("random_password") with EncryptedPassword
println(u.password) // see the encrypted version here
Pero, ¿no debería Scala ser indiferente si estoy usando un campo o un método? – Geo
Bueno, con respecto a la anulación, creo que def puede ser invalidado por val, pero no a la inversa. –