scala定义了两个选项,先返回,否则返回第二个
发布时间:2020-12-16 18:26:46 所属栏目:安全 来源:网络整理
导读:如果我有optionA和optionB,如果两者都被定义并且optionB都未定义,我怎么能返回optionA. 基本上,我试图改写这个 val result: Option[Long] = if(optionA.isDefined optionB.isDefined) optionA else optionB 不,optionA.orElse(optionB)不一样,打破了我们的测
如果我有optionA和optionB,如果两者都被定义并且optionB都未定义,我怎么能返回optionA.
基本上,我试图改写这个 val result: Option[Long] = if(optionA.isDefined && optionB.isDefined) optionA else optionB 不,optionA.orElse(optionB)不一样,打破了我们的测试用例.必须定义两个选项,我们要使用optionA.如果定义了optionA并且未定义optionB,则我们需要None. 有人将我的问题标记为重复,但事实并非如此.我遇到了麻烦,但最终偶然发现了答案…. 好吧,我想我明白了,我绝对认为它不那么人性化了 optionA.flatMap { aId => optionB.map(bId => bId).orElse(Some(aId)) } 为了更清晰.因此,我们的真值表 optionA.isDefined optionB.isDefined resultNeeded None None None Some(a) None None None Some(b) Some(b) Some(a) Some(b) Some(a) 谢谢 解决方法
如果您熟悉标准的monadic操作,我认为表达您想要的最简洁的方法是:
optionB.flatMap(_ => optionA orElse optionB) 但非常清楚 – 而且非常快,因为它避免了任何对象的创建! – 只是在逻辑中准确地说出你想要的东西,即你已经写过的东西: if (optionA.isDefined && optionB.isDefined) optionA else optionB 这就是你所说的(“如果两者都被定义,我想要A,否则我想要B”) – 所以只需将其作为代码写出来. 当降低清晰度和速度时,使用更高级别的方法并不总是可行的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |