0

执行以下操作会产生错误。

x = ""
h = {:a => x==nil?"":x}

错误:

syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
h = {:a => x==nil?"":x}

不能在散列文字定义中使用三元运算符吗?

4

3 回答 3

7

在散列文字定义中使用三元运算符没有问题。

x==nil?解释器中,将?withnil视为对该方法的调用nil?。因此,三元运算符的其余部分实际上是语法错误,因为您实际上并没有格式正确的运算符,因为?它不是它的一部分。

通过使用适当的间距,您应该输入的是:

h = {:a => x == nil ? "" : x}

可以更好地表示为:

h = {:a => x.nil? ? "" : x}

如果false不是有效值,x您也可以使用@Garethh = {:a => x || ""}建议的表格

此外,如果x应该始终是 a string,您可以使用@sawah = {a: x.to_s}建议的表格

于 2013-07-14T01:12:35.397 回答
4

照顾好空间。Ruby 会将nil?其视为方法调用。这有效:

h = {:a => x==nil ? "" : x }
于 2013-07-14T01:08:50.030 回答
2

您也可以 ( gasp ) 使用括号,如下所示:

h = {:a => (x == nil)?"":x}

但是在这种情况下,您确实应该添加间距或使用该Object#nil?方法。

于 2013-07-14T01:20:07.140 回答