-

   rss_rss_hh_new

 - e-mail

 

 -

 LiveInternet.ru:
: 17.03.2011
:
:
: 51

:


[] return Scala

, 18 2017 . 13:25 +

, , tpolecat. Scala- doobie cats.


, return , return Scala. .


, , 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, , . . , , , .


Return


, , . , . , :


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 . , .

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/331138/

:  

: [1] []
 

:
: 

: ( )

:

  URL