gpt4 book ai didi

scala - 如何在 scala 的单个语句中检查 null ?

转载 作者:行者123 更新时间:2023-12-03 06:45:11 24 4
gpt4 key购买 nike

在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com