在ruby中有更优雅的方式来做这个逻辑
a = nil #=> obviously 'a' can have value but I am just setting it nil to make the eg more clear
b = a
unless b
b = "value"
end
这样我们最终得到b的值。我们可以有上述代码的另一种变体,如此
a = nil
b = a
b ||= "value"
我也可以使用三元语句编写上面的代码,如
b = a ? a : "value"
但如果你用一长串代码替换变量a和“value”,那么这个三元语句也将开始看起来很难看。
上述逻辑可以以某种方式变得更优雅/更具表现力,还是仅限于上述解决方案?
答案 0 :(得分:10)
你几乎自己回答了你的问题。
b = a
b ||= "value"
可以缩短为
b = a || "value"
答案 1 :(得分:2)
b ||= "value"
与Perl广受欢迎的//
和//=
运算符非常相似,因为在Ruby中,唯一检测错误的是nil
(以及,false
1}})。这使它在功能上与Perl的//=
运算符完全相同。你能比a ||= b
获得多少“优雅”?老实说,我不知道除了让操作员更短(并且那时你只是愚蠢)之外,这个想法可以传达得多么紧凑。
答案 2 :(得分:1)
我不喜欢使用||运营商因为Farrel在ib的回答中指出了这一点。它可能就在这里,但我总是害怕它会让我有一天绊倒我。所以我担心我倾向于选择相当行人:
b = "value"; b = a unless a == nil
不是很漂亮,我知道,但非常安全,非常非常明确。