[] return Scala |
, , tpolecat. Scala- doobie cats.
, , Coursera , #scala , , return
. , :
return
, .
:
// ,
// .
def add(n: Int, m: Int): Int = n + m
def sum(ns: Int*): Int = ns.foldLeft(0)(add)
scala> sum(33, 42, 99)
res0: Int = 174
// , return.
def addR(n:Int, m:Int): Int = return n + m
def sumR(ns: Int*): Int = ns.foldLeft(0)(addR)
scala> sumR(33, 42, 99)
res1: Int = 174
. sum
sumR
, , return
. , add
addR
:
// add.
def sum(ns: Int*): Int = ns.foldLeft(0)((n, m) => n + m)
scala> sum(33, 42, 99)
res2: Int = 174 // .
// addR.
def sumR(ns: Int*): Int = ns.foldLeft(0)((n, m) => return n + m)
scala> sumR(33, 42, 99)
res3: Int = 33 // ...
, :
return
, , return.
return
, . :
def foo: Int = {
val sumR: List[Int] => Int = _.foldLeft(0)((n, m) => return n + m)
sumR(List(1,2,3)) + sumR(List(4,5,6))
}
scala> foo
res4: Int = 1
, return
, , NonLocalReturnControl[A]
. :
def lazily(s: => String): String =
try s catch { case t: Throwable => t.toString }
def foo: String = lazily("foo")
def bar: String = lazily(return "bar")
scala> foo
res5: String = foo
scala> bar
res6: String = scala.runtime.NonLocalReturnControl
- , Throwable
, , . breakable
, return, .
. , return
-, , ? , , .
scala> def foo: () => Int = () => return () => 1
foo: () => Int
scala> val x = foo
x: () => Int =
scala> x()
scala.runtime.NonLocalReturnControl
, NonLocalReturnControl
NoStackTrace
, , . .
return
? return a
a
, return
, return a
. , , , . , :
def x: Int = { val a: Int = return 2; 1 } // 2
, , , return a
a
. , -, :
def x: Int = { val a: String = return 2; 1 }
, . ? return 2
, Int
String
. final
, Int
AnyVal
, , .
def x: Int = { val a: Nothing = return 2; 1 }
, Nothing
. , Nothing
, . Nothing
( ), return
. , Nothing
, , , ( ) - , .
: -, , -, - , Scheme, , . . , , , .
, , . , . , :
def foo(n:Int): Int = {
if (n < 100) n else return 100
}
, , :
def foo(n: Int): Int = {
val a = return 100
if (n < 100) n else a
}
, : return
.
. , , , , . ,
// ,
// .
def max100(ns: List[Int]): Int =
ns.foldLeft(0) { (n, m) =>
if (n + m > 100)
return 100
else
n + m
}
:
def max100(ns: List[Int]): Int = {
def go(ns: List[Int], a: Int): Int =
if (a >= 100) 100
else ns match {
case n :: ns => go(ns, n + a)
case Nil => a
}
go(ns, 0)
}
. return
, Scala, . , return
, , , , .
:
. firegurafiku . , .