Closed alberskib closed 10 years ago
Just a little note about type parameters/members. It's not that type parameters are evil, they just should be used carefully, i.e. for example just for setting a corresponding type member. For example, a common pattern is
trait AnySomething {
type Member <: T
}
class Something[Parameter <: T] extends AnySomething {
type Member = Parameter
}
Then it's convenient to use X <: Something[Foo]
in the sense of X <: AnySomething { type Member = X }
— it's just shorter, but then it is safe to ask X#Member
to get Foo
. Also Something
often has normal parameters and is used as a constructor for that abstract type AnySomething
, like
trait AnySomething {
type Member <: T
val member: Member
}
case class Something[Parameter <: T](val member: Parameter) extends AnySomething {
type Member = Parameter
}
Then it's convenient to use val x = Something(foo)
without manual setting of Member
to foo.type