问题标签 [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.
javascript - javascript 中是否有空合并 (Elvis) 运算符或安全导航运算符?
我将举例说明:
猫王接线员 (?: )
“Elvis 运算符”是 Java 三元运算符的缩写。如果表达式解析为 false 或 null,则可以方便地返回一个“合理的默认”值。一个简单的示例可能如下所示:
安全导航操作员 (?.)
安全导航运算符用于避免 NullPointerException。通常,当您有一个对象的引用时,您可能需要在访问该对象的方法或属性之前验证它不为空。为避免这种情况,安全导航运算符将简单地返回 null 而不是抛出异常,如下所示:
ruby - nil 的安全导航运算符 (&.)
由于 Ruby 2.3 引入了安全导航操作符(&.
),也就是孤独操作符,nil
对象上的行为看起来很奇怪。
这是设计成这样吗?还是在添加孤独运算符时滑落的一些边缘情况?
ruby - 使用 Hash#dig 或 Lonely operator(&.) 为嵌套哈希安全地赋值
要将值分配给嵌套哈希,我们可以使用
但是,如果缺少中间的任何部分,则会导致错误。
就像是
不会工作,因为还没有Hash#dig=
可用的。
为了安全地赋值,我们可以做
但是有更好的方法吗?
ruby - NilCheck 修复了安全导航运算符 (&.)
类上的这个简单方法只是status
使用安全导航运算符运行该方法。
但是臭味报告这个警告:
如何正确编写这样的方法来避免 Nil Check?
我还从thoughtbot 验证了这篇文章,但对于安全导航操作员来说似乎“太多”了。
红宝石 2.3.1
ruby - Ruby:安全导航运算符,未定义的方法`call`
我正在尝试将数字文字与可以返回的函数的返回值nil
或数字进行比较。考虑一下:
这将在 50% 的时间内爆炸NoMethodError: undefined method '>' for nil:NilClass
。所以我尝试了这个:
这种方法可以达到nil
我的预期,但是当我unreliable
返回时我得到了这个42
:
我怀疑这与每个只允许一个实例存在的怪癖有关Numeric
,请参见此处。我知道我可以做到这一点:
但是有没有办法将安全导航运算符与数字 and :>
, :<
, :==
, :+
, :-
, :/
,:*
等一起使用?
编辑:我的问题的重点Numeric
是红鲱鱼。请参阅@Jörg 的回答。我将 Rails 的try
语法与安全导航运算符的语法混淆了。
html - 有没有可以在数组上使用的安全导航运算符之类的东西?
我已经使用 Safe Navigation Operator for Objects 来加载异步调用,这非常棒。我以为我可以为 Arrays 重现相同的内容,但它在我的 Angular 代码中显示模板解析错误。我知道*ngIf
是一种替代解决方案,但是否有更简单(通过代码)的方式,就像安全导航操作员一样?
ruby - Rubocop、安全导航和否定
我有如下结构,Rubocop 抱怨我试图安抚
(项目存在且不为空)
和
(项目存在且不是正数)
在这两种情况下,Rubocop 都会抛出 aStyle/SafeNavigation
并说我应该使用它&.
。但是,似乎没有办法编写它。
在这两种情况下,问题的一部分是没有表达相反函数的简洁方式 - 字符串没有“非空”,数字没有“负数或零”。例如,写入bar&.negative?
返回零的相反结果。
在另一种情况下,写作unless !foo&.empty?
使 Rubocop 抱怨除非 + 否定,但同样没有办法将其重写为if foo&.
存在的任何操作。
(顺便说一句,这是纯 Ruby,没有 Rails,所以我没有blank?
and present?
)
angular - 在 Angular 中使用安全导航传递整个数据
我将项目(数据)传递给是否显示某个视图。但是,当我刷新页面时,它会破坏页面。这个 div 有效<p class="admin">{{ project?.name }}</p>
。但是下面的代码,当我单击刷新时会产生错误。当我单击刷新时,错误是无法读取未定义的属性“material_projects”。我如何在这个安全导航中通过*ngIf="getProjectType(projects) === 'mat_exist'"
ts
ts