【发布时间】:2013-08-18 02:09:57
【问题描述】:
我想完成这个:
名为 abc 的变量必须为 None,除非复杂处理的结果为真。 我写了一个开头和答案,但它不起作用:
def abc={
None
copie.getRoot().asInstanceOf[DefaultMutableTreeNode].children() foreach ({
site => <...more things after...>
}
在
但是编译器不接受这个命令,我的意思是“无”后跟一些条件最终由 Some(xxx) 完成。如果我在条件后面加上“无”,结果当然总是“无”,这不是预期的。
你能告诉我它是否可以这样工作,以及如何工作? 否则我该如何继续?
@Robin:你没看错:我认为 if 在 java 中:结果应该是 None 或 Some(xxx),但令人惊讶的是,如果我将“None”放在块的开头并在“None”之后条件语句,它最终返回 Some(xxx),eclipse 的编译器不接受我的代码。 所以第一个问题可能是:这个顺序(无,然后是一些条件处理最终返回 Some(xxx) 对吗? 示例:
def abc():Option[DefaultMutableTreeNode]={
None
MyTree.getRoot().children() foreach{site=>
if (site.toBeImported()) Some(site)
else site.children() foreach {type=>
if (type.toBeImported()) Some(type)
}
}
}
这里这个函数返回 None,如果一个站点是“toBeImported”(如果有很多,将返回最后一个),或者 Some(type) 如果一个类型是“toBeImported”(最后一个) )。 这不是我的程序中的内容,但它很好地总结了这个想法。
【问题讨论】:
-
你为什么需要那个
None?无论如何,你的abc是Unit返回类型,所以你不要期望它什么都不返回。abc的目的是什么? -
@lolvely 您正在考虑 Java return 关键字,这是一个立即停止执行当前方法的命令。 Scala 的 return 概念是“在函数执行结束时,表达式中的任何值都是该函数的返回值”。
-
@Robin:你没看错,但令人惊讶的是,如果我将“None”放在块的开头和“None”之后,条件语句最终返回 Some(xxx),会有一个错误。这个顺序对吗?例如:
def abc():Option[DefaultMutableTreeNode]={ None MyTree.getRoot().children() foreach{site=> if (site.toBeImported()) Some(site) else site.children() foreach {type=> if (type.toBeImported()) Some(type) } } } -
@lolveley 不,这是不对的。 None 不在函数执行的 end 处 - 它不是执行 last 的表达式 - 所以它没有效果。你不能那样做!您必须返回要从要执行的 last 表达式中返回的内容。
-
@cdshines:是的,你说得对;你应该阅读:def abc():Option[Localisation]=...
标签: scala conditional-statements option