执行以下操作会产生错误。
x = ""
h = {:a => x==nil?"":x}
错误:
syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
h = {:a => x==nil?"":x}
不能在散列文字定义中使用三元运算符吗?
执行以下操作会产生错误。
x = ""
h = {:a => x==nil?"":x}
错误:
syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
h = {:a => x==nil?"":x}
不能在散列文字定义中使用三元运算符吗?
在散列文字定义中使用三元运算符没有问题。
在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}
建议的表格
照顾好空间。Ruby 会将nil?
其视为方法调用。这有效:
h = {:a => x==nil ? "" : x }
您也可以 ( gasp ) 使用括号,如下所示:
h = {:a => (x == nil)?"":x}
但是在这种情况下,您确实应该添加间距或使用该Object#nil?
方法。