Last active
February 22, 2017 13:51
-
-
Save cvogt/65e33ed1f9de93c151e0ff145f8e74fb to your computer and use it in GitHub Desktop.
Scala language proposals for defaults, .copy and overrides
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// DEFAULT VALUES | |
def foo(str: String = "test") = ??? | |
assert( foo.str == "test" ) // new: named access to default values | |
case class Bar(str: String = "test") | |
assert( Bar.apply.str == "test" ) // same for case classes via .apply method | |
// REPETIION-FREE .copy (aka lenses light) | |
case class Baz(bar: Bar) | |
val b = Baz( Bar( "world" ) ) | |
assert( | |
b.copy( bar = b.bar.copy( str = "hello, " ++ b.bar.str ) ) // old: having to repeat repeat b and b.bar | |
== b.copy( bar _= _.copy( str _= "hello, " ++ _ ) ) // new: short version via ~= operator for modification (alt syntax ~=) | |
) | |
// new short version desugars to this (using access to default values): | |
b.copy( bar = b.copy.bar.copy( str = "hello, " ++ b.copy.bar.copy.str ) ) | |
// MODIFYING OVERRIDES | |
class Foo{ def str = "world" } | |
assert( | |
new Foo{ override str = "hello, " ++ super.str }.str // having to repeat `str` in override | |
== new Foo{ override str _= "hello, " ++ _ }.str // new: modifying function based on parent value (alt syntax ~=) | |
) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment