作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 scala 代码中:
QueueManager.add(getObject)
其中 getObject
是返回 QueueObject
类型的对象的方法。
def getObject : QueuObject = {
val response = //some response
return response
}
有没有办法在添加 QueueObject 时检查响应是否为空?我知道我可以做到这一点:
if (getObject != null)
QueueManager.add(getObject)
但我不想添加一定程度的缩进。是否有一个运算符可以内联执行此操作?
谢谢。
最佳答案
尽量避免使用null
在斯卡拉。它实际上只是为了与 Java 进行互操作。在 Scala 中,使用 Option
对于可能是空的东西。如果您调用可能返回 null
的 Java API 方法,将其包裹在 Option
中立即。
def getObject : Option[QueueObject] = {
// Wrap the Java result in an Option (this will become a Some or a None)
Option(someJavaObject.getResponse)
}
注意:您不需要将其放在 val
中或使用显式 return
Scala 中的声明;结果将是 block 中的最后一个表达式(事实上,由于只有一个语句,因此您甚至不需要 block )。
def getObject : Option[QueueObject] = Option(someJavaObject.getResponse)
除了其他人已经显示的内容(例如在 foreach
上调用 Option
,这可能会有点令人困惑),您还可以调用 map
其上(如果不需要,则忽略 map 操作的结果):
getObject map QueueManager.add
如果Option
,这将没有任何作用。是 None
,并调用QueueManager.add
如果是Some
.
我发现使用常规if
然而,比使用任何这些“技巧”来避免缩进级别更清晰和简单。您也可以将其写在一行上:
if (getObject.isDefined) QueueManager.add(getObject.get)
或者,如果您想处理 null
而不是使用Option
:
if (getObject != null) QueueManager.add(getObject)
编辑 - Ben 是对的,小心不要打电话 getObject
如果有副作用,则多次;最好这样写:
val result = getObject
if (result.isDefined) QueueManager.add(result.get)
或者:
val result = getObject
if (result != null) QueueManager.add(result)
关于scala - 如何在 scala 的单个语句中检查 null ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5740906/
我是一名优秀的程序员,十分优秀!