问题标签 [safe-navigation-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
22 回答
145641 浏览

javascript - javascript 中是否有空合并 (Elvis) 运算符或安全导航运算符?

我将举例说明:

猫王接线员 (?: )

“Elvis 运算符”是 Java 三元运算符的缩写。如果表达式解析为 false 或 null,则可以方便地返回一个“合理的默认”值。一个简单的示例可能如下所示:

安全导航操作员 (?.)

安全导航运算符用于避免 NullPointerException。通常,当您有一个对象的引用时,您可能需要在访问该对象的方法或属性之前验证它不为空。为避免这种情况,安全导航运算符将简单地返回 null 而不是抛出异常,如下所示:

0 投票
1 回答
4523 浏览

ruby - 为什么 Ruby 使用自己的安全导航运算符语法?

Ruby 2.3.0 引入了安全导航语法,通过引入一个仅在前一个语句的值不是nil时才调用方法的新运算符,简化了链式方法调用的 nil 处理。这是一个已经存在于例如 C#、Groovy 和 Swift 中的特性。例如在 Groovy中,语法是

这基本上意味着结果值是foo.bar的值,除非foonull,在这种情况下,返回值也为null,因此不会引发异常。C#(称为空条件运算符)和Swift(称为可选链表达式)也使用这种表示法。

所以语法在其他语言中似乎是相当标准的。现在,为什么在 Ruby 中的语法是

反而?

0 投票
2 回答
8775 浏览

ruby - nil 的安全导航运算符 (&.)

由于 Ruby 2.3 引入了安全导航操作符(&.),也就是孤独操作符,nil对象上的行为看起来很奇怪。

这是设计成这样吗?还是在添加孤独运算符时滑落的一些边缘情况?

0 投票
2 回答
543 浏览

ruby - 什么是 Ruby2.3 之前的等价于安全导航运算符(&. 或“& 点”)?

我能找到的关于 Ruby 的新安全导航运算符 ( ) 的每个问题的答案(Q1Q2&. )都错误地声明它obj&.foo等同于obj && obj.foo.

很容易证明这种等价是不正确的:

此外,存在多重评估的问题。用具有副作用的表达式替换obj表明副作用仅在&&表达式中加倍:

obj&.foo避免这些问题的最简洁的 pre-2.3 等价物是什么?

0 投票
6 回答
6458 浏览

ruby - 使用 Hash#dig 或 Lonely operator(&.) 为嵌套哈希安全地赋值

要将值分配给嵌套哈希,我们可以使用

但是,如果缺少中间的任何部分,则会导致错误。

就像是

不会工作,因为还没有Hash#dig=可用的。

为了安全地赋值,我们可以做

但是有更好的方法吗?

0 投票
2 回答
789 浏览

ruby - NilCheck 修复了安全导航运算符 (&.)

类上的这个简单方法只是status使用安全导航运算符运行该方法。

但是臭味报告这个警告:

如何正确编写这样的方法来避免 Nil Check?

我还从thoughtbot 验证了这篇文章,但对于安全导航操作员来说似乎“太多”了。

红宝石 2.3.1

0 投票
2 回答
1791 浏览

ruby - Ruby:安全导航运算符,未定义的方法`call`

我正在尝试将数字文字与可以返回的函数的返回值nil或数字进行比较。考虑一下:

这将在 50% 的时间内爆炸NoMethodError: undefined method '>' for nil:NilClass。所以我尝试了这个:

这种方法可以达到nil我的预期,但是当我unreliable返回时我得到了这个42

我怀疑这与每个只允许一个实例存在的怪癖有关Numeric,请参见此处。我知道我可以做到这一点:

但是有没有办法将安全导航运算符与数字 and :>, :<, :==, :+, :-, :/,:*等一起使用?


编辑:我的问题的重点Numeric是红鲱鱼。请参阅@Jörg 的回答。我将 Rails 的try语法与安全导航运算符的语法混淆了。

0 投票
4 回答
6371 浏览

html - 有没有可以在数组上使用的安全导航运算符之类的东西?

我已经使用 Safe Navigation Operator for Objects 来加载异步调用,这非常棒。我以为我可以为 Arrays 重现相同的内容,但它在我的 Angular 代码中显示模板解析错误。我知道*ngIf是一种替代解决方案,但是否有更简单(通过代码)的方式,就像安全导航操作员一样?

0 投票
2 回答
907 浏览

ruby - Rubocop、安全导航和否定

我有如下结构,Rubocop 抱怨我试图安抚

(项目存在且不为空)

(项目存在且不是正数)

在这两种情况下,Rubocop 都会抛出 aStyle/SafeNavigation并说我应该使用它&.。但是,似乎没有办法编写它。

在这两种情况下,问题的一部分是没有表达相反函数的简洁方式 - 字符串没有“非空”,数字没有“负数或零”。例如,写入bar&.negative?返回零的相反结果。

在另一种情况下,写作unless !foo&.empty?使 Rubocop 抱怨除非 + 否定,但同样没有办法将其重写为if foo&.存在的任何操作。

(顺便说一句,这是纯 Ruby,没有 Rails,所以我没有blank?and present?

0 投票
1 回答
354 浏览

angular - 在 Angular 中使用安全导航传递整个数据

我将项目(数据)传递给是否显示某个视图。但是,当我刷新页面时,它会破坏页面。这个 div 有效<p class="admin">{{ project?.name }}</p>。但是下面的代码,当我单击刷新时会产生错误。当我单击刷新时,错误是无法读取未定义的属性“material_projects”。我如何在这个安全导航中通过*ngIf="getProjectType(projects) === 'mat_exist'"

ts

ts