Function 什么是非本地报税表?
什么是非本地回报?在什么情况下它是有用的?请给出一个例子来解释。它意味着退出一个函数,并在调用该函数的地方之外的其他地方结束。在Java和C++中,它主要用于表示异常(即Function 什么是非本地报税表?,function,programming-languages,Function,Programming Languages,什么是非本地回报?在什么情况下它是有用的?请给出一个例子来解释。它意味着退出一个函数,并在调用该函数的地方之外的其他地方结束。在Java和C++中,它主要用于表示异常(即try、throw、和catch),但它也可以表示类似于C中的setjmp/longjmp等机制,用于在ruby块上下文中使用非局部返回 Ruby的块支持非本地返回(一些引用),这意味着 从块返回的行为与从 块的原始上下文 这基本上意味着您可以从函数调用一个块,并且该块可以从原始函数返回。为了解释这个问题,这里有一些示例代码来解
try
、throw
、和catch
),但它也可以表示类似于C中的setjmp/longjmp
等机制,用于在ruby块上下文中使用非局部返回
Ruby的块支持非本地返回(一些引用),这意味着
从块返回的行为与从
块的原始上下文
这基本上意味着您可以从函数调用一个块,并且该块可以从原始函数返回。为了解释这个问题,这里有一些示例代码来解释非局部返回是什么
object Scratch {
def foo: Int = {
val list = List(1, 2, 3, 4)
list.foreach { each =>
if(each > 2) {
return each // NLR
}
println(each)
}
return 5
}
def main(args : Array[String]) : Unit = {
val i = foo
println("i: " + i)
}
上面的代码是用Scala编写的,但对于支持非本地返回的任何其他语言,如Kotlin和最突出的Smalltalk和Ruby(我认为大多数函数式编程语言,如List),情况都是一样的
这里的要点是,上面的代码会将此输出写入控制台:
1
2
i: 3
因此它也不会将4和5打印到控制台,这就是本例中与不支持闭包内非本地返回的语言的最大区别
在上面的代码片段中,第“NLR”行的返回返回了闭包>>并注意到scala3中不推荐使用此功能(请参见)@Amit Portnoy:这是正确的,它确实让我感到悲伤:-(.我在Scala语言论坛上发了一篇帖子,试图与Scala的人谈论这件事,但没有得到回答。它还没有完全消失,你需要用
返回
并使用throwReturn
()。他们试图使基本的ExpException用法更加明确。还请注意,您将有一些延续,使这种行为更加结构化。()