Subtype polymorphism in scala -
what difference between following 2 declarations of sum functions?
def sum[a](xs:list[a]) = ..... def sum[a <: list[a]](xs:a) = ....
edit: elaborate more....
lets want write method head on list.
i can write head follow:
def head[a](xs:list[a]) = xs(0)
or else can write
def head[a <: list[a]] (xs:a) = xs(0)
which 1 prefer , when?
note: 1 difference figured out implicit conversions not applied second one
the first 1 takes list[a]
parameter, second 1 a
subtype of list[a]
. consider following example:
scala> trait foo[a <: foo[a]] defined trait foo scala> class bar extends foo[bar] defined class bar
the recursive type parameter on foo
can useful, when want define method in trait takes or returns type of subclass:
trait foo[a <: foo[a]] { def f: } class bar extends foo[bar] { def f: bar = new bar } class baz extends foo[baz] { def f: baz = new baz }
i don't know how specific example should work, because don't know how sum on type.
Comments
Post a Comment