[scala/en] Make return value example actually demonstrate issue

Previously the `return z` didn't actually have any effect on the output, since the outer function just return the anon function's result directly. Updated to make the outer function do something to demonstrate the difference. Also renamed functions to make what they're doing easier to follow, and added a couple examples of behavior w/ explanations
This commit is contained in:
Joel Bradshaw 2017-06-23 13:35:19 -07:00 committed by GitHub
parent 5b4c74365c
commit bcb1b623b1

View File

@ -253,16 +253,20 @@ weirdSum(2, 4) // => 16
// def that surrounds it.
// WARNING: Using return in Scala is error-prone and should be avoided.
// It has no effect on anonymous functions. For example:
def foo(x: Int): Int = {
val anonFunc: Int => Int = { z =>
def addTenButMaybeTwelve(x: Int): Int = {
val anonMaybeAddTwo: Int => Int = { z =>
if (z > 5)
return z // This line makes z the return value of foo!
return z // This line makes z the return value of addTenButMaybeTwelve!
else
z + 2 // This line is the return value of anonFunc
}
anonFunc(x) // This line is the return value of foo
anonMaybeAddTwo(x) + 10 // This line is the return value of foo
}
addTenButMaybeTwelve(2) // Returns 14 as expected: 2 <= 5, adds 12
addTenButMaybeTwelve(7) // Returns 7: 7 > 5, return value set to z, so
// last line doesn't get called and 10 is not added
/////////////////////////////////////////////////
// 3. Flow Control