Java 从“返回”;至于;在Scala中,与“从”返回不同;至于;在爪哇
我有一个Java代码,我想将其转换为Scala one:Java 从“返回”;至于;在Scala中,与“从”返回不同;至于;在爪哇,java,scala,Java,Scala,我有一个Java代码,我想将其转换为Scala one: MyClass myMethod(String str1) { for (Item item: items) { if (/* some condition */) { if(/* another condition */) { return item.myMethod123(); } } } retu
MyClass myMethod(String str1) {
for (Item item: items) {
if (/* some condition */) {
if(/* another condition */) {
return item.myMethod123();
}
}
}
return super.myMethod(str1);
}
如果我在Scala中使用for
,它将被转换为map
,也就是说在map
中调用return
只会从map
返回值,但不会停止myMethod
执行。但我希望它的行为与此Java代码中的行为完全相同
我如何解决这个问题
UPDATE:我的意思是,我必须使用foreach
而不是for
。但是,从foreach
调用return
只是从foreach
返回值,而不是停止执行myMethod
UPDATE2:我很困惑,foreach
没有返回任何值。它实际上会停止执行myMethod
,因为在幕后它实际上抛出了一个(无堆栈跟踪)异常,在实际返回之前被myMethod
捕获。所以你就
def myMethod(str1: String) {
for (item <- items) {
if (/*some cond*/) {
if (/*other cond*/) {
return item.myMethod123
}
}
}
super.myMethod(str1)
}
它将首先选择可以调用方法的项,如果没有这样的项,它将默认为super。它实际上将停止执行myMethod
,因为在幕后它实际上抛出了一个(无堆栈跟踪)异常,该异常在实际返回之前被myMethod
捕获。所以你就
def myMethod(str1: String) {
for (item <- items) {
if (/*some cond*/) {
if (/*other cond*/) {
return item.myMethod123
}
}
}
super.myMethod(str1)
}
它将首先选择您可以调用方法的项,或者如果没有这样的项,则默认为super。您可以显示试用scala代码吗?foreach不像java表达式,它是集合上的函数,它只会调用映射中每个项的函数,就像java一样,您还需要使用for表达式,比如@rex kerr explained
items.find(item=>/*某些条件*/&&/*另一个条件*/).fold(super.myMethod(str1))(u.myMethod123())
你能展示你的试用scala代码吗?foreach不像java表达式,它是集合上的一个函数,它只会在地图中的每个项目上调用一个函数,要想像java一样,您还需要使用for表达式,比如@rex kerr explaineditems.find(item=>/*某些条件*/&&/*另一个条件*/).fold(super.myMethod(str1))(u.myMethod123())