Scala: Difference between revisions
Jump to navigation
Jump to search
Hoppinglife (talk | contribs) No edit summary |
Hoppinglife (talk | contribs) No edit summary |
||
| Line 25: | Line 25: | ||
See [https://docs.scala-lang.org/tour/self-types.html Official tour], [http://jonasboner.com/real-world-scala-dependency-injection-di/ a discussion on the cake pattern] and [https://stackoverflow.com/questions/1990948/what-is-the-difference-between-self-types-and-trait-subclasses a StackOverflow question] about this. | See [https://docs.scala-lang.org/tour/self-types.html Official tour], [http://jonasboner.com/real-world-scala-dependency-injection-di/ a discussion on the cake pattern] and [https://stackoverflow.com/questions/1990948/what-is-the-difference-between-self-types-and-trait-subclasses a StackOverflow question] about this. | ||
=== RAII and Resource Handling === | |||
Revision as of 16:19, 14 June 2020
Type bounds
B <: U imposes a upper bound on type U, while B >: L imposes a lower bound. This is useful for generic methods that takes only classes on a particular inheritance tree as its type parameters.
The official tour has a pretty good explanation: Upper bounds and Lower bounds
Self Type
A trait with a self type cannot be used without mixed in that trait first.
trait User {
def username: String
}
trait Tweeter {
this: User => // reassign this
def tweet(tweetText: String) = println(s"$username: $tweetText")
}
A question is how it is different from trait subclasses.
Context Bound
See Official tour, a discussion on the cake pattern and a StackOverflow question about this.