- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我今天在一些 PHP 代码中看到了这一点:
$items = $items ?: $this->_handle->result('next', $this->_result, $this);
我不熟悉这里使用的 ?:
运算符。它看起来像一个三元运算符,但是如果谓词为真,则评估的表达式已被省略。什么意思?
最佳答案
如果左操作数是truthy,则计算左操作数, 否则为右操作数。
在伪代码中,
foo = bar ?: baz;
大致解析为
foo = bar ? bar : baz;
或
if (bar) {
foo = bar;
} else {
foo = baz;
}
区别在于 bar
只会被评估一次。
您还可以使用它对 foo
进行“自检”,如您发布的代码示例所示:
foo = foo ?: bar;
如果 foo
为 null 或 false,这会将 bar
分配给 foo
,否则它将保持 foo
不变.
更多示例:
<?php
var_dump(5 ?: 0); // 5
var_dump(false ?: 0); // 0
var_dump(null ?: 'foo'); // 'foo'
var_dump(true ?: 123); // true
var_dump('rock' ?: 'roll'); // 'rock'
?>
顺便说一下,它叫做 Elvis operator .
关于php - ? : operator (the 'Elvis operator' ) in PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1993409/
谁能解释ternary operator shorthand 之间的区别? (?:) 和 null coalescing operator (??) 在 PHP 中? 他们什么时候表现不同,什么时候表
下面的代码将打印B null?.let { println("A") } ?: println("B") 但是下面的代码没有渲染B null?.let { Text(text = "A
在 Elvis Operator 时遇到了一个有趣的案例?:不当行为。 想象一下有这样的东西 base64ToBmp(str)?.let { } ?: run { } 并在一些旧手机和模拟器上看到
让我们编写这样的代码(App.xaml.xs 的片段): public class MethodClass { public async Task Job() { De
我在 Angular 2 中的网站进展得越多,Elvis Operator 似乎就越多。是使这一切成为可能的神奇力量。我采取的每一步都涉及弄清楚如何将它正确地应用于对数据完成的所有事情的每个实例。我觉
elvis 运算符,又名 null 条件运算符,非常酷。 在 LINQ 查询中,它与 null 合并“??”一起工作得很好运营商。 Somedata.Where(dt=>(dt?.Inner?.Inn
所以我可以替换旧的三元运算: def something = mainThing != null ? mainThing : "gone!" 使用 Elvis 运算符: def something =
如果 nextbitmap() 的结果为 null,则 Kotlin 中的以下代码从父函数返回 val bitmap = nextbitmap() ?: return // something t
遇到 Kotlin elvis 运算符的一些奇怪行为,当尝试从映射中通过键获取某个值时,没有一个 block 不被执行。 map["Key"]?.let { println("Run bloc
我想知道 ?:如果以下函数调用之一返回 null,则调用 elvis 运算符. private fun extractProductAttributes(productEntity: JSONOb
我真的不知道如何命名标题,因此我将尽我所能解释它: val a = b ?: ({ val temp = c.evaluate() store(temp) temp // re
在我的代码中,我发现我的方法可能返回 null 的情况。在这种情况下,我宁愿抛出异常也不愿返回 null。但是我不想使用常规 if 因为在我看来它看起来很糟糕。参见代码: class Type{} @
问题:Elvis 运算符 是否计划在未来的 Java 版本中实现?或者是否有任何库将其引入 Java? 我读过 it was proposed for Java SE 7 but didn't mak
这个问题在这里已经有了答案: Is there a null-coalescing (Elvis) operator or safe navigation operator in javascrip
所以我有一个来自服务器的复杂日期模型来提供我的 Angular2 组件。下面显示了该组件模板的一小部分: {{Person.Address.City}} Address 可能是
许多语言中的三元运算符是这样工作的: x = f() ? f() : g() 如果 f()那么是真的x被赋值为 f() , 否则赋值为 g() .然而,有些语言有更简洁的 elvis operator
所以,假设我们有一个简单的对象,它包含两种不同语言的字符串,例如 welcomeText = {"de": "Willkommen zurück!", "en": "欢迎回来!"。 welcomeTe
我正在将 Firebase DataSnapshot (json) 对象解析为数据类。除了以下内容,我可以组合它们并在其中任何一个为空时返回吗?类似于 Swift 的 guard let ..., l
我遇到了解析问题,这已通过 Elvis 运算符解决,但如果我的 key 包含正斜杠,我就不能使用 Elvis 运算符,因为我必须将该 key 放入方括号中。 如果键像这样简单(“firstname”)
我会举例说明: 猫王运算符 (?: ) The "Elvis operator" is a shortening of Java's ternary operator. One instance of
我是一名优秀的程序员,十分优秀!