执行以下操作会产生错误。
x = ""
h = {:a => x==nil?"":x}
错误:
syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
h = {:a => x==nil?"":x}
是否无法在哈希文字定义中使用三元运算符?
答案 0 :(得分:7)
在散列字面定义中使用三元运算符没有问题。
在x==nil?
中,解释程序正在考虑将?
和nil
作为对nil?
方法的调用。那么三元运算符的其余部分实际上是一个语法错误,因为你没有一个格式良好的运算符,因为?
不是它的一部分。
使用适当的间距输入的内容是:
h = {:a => x == nil ? "" : x}
可以更好地表达为:
h = {:a => x.nil? ? "" : x}
如果false
不是x
的有效值,您也可以使用@Gareth建议的h = {:a => x || ""}
表单
此外,如果x
应始终为string
,则可以使用@sawa
h = {a: x.to_s}
表单
答案 1 :(得分:4)
照顾好空间。 Ruby会将nil?
视为方法调用。这有效:
h = {:a => x==nil ? "" : x }
答案 2 :(得分:2)
您也可以(喘气)使用括号,如下所示:
h = {:a => (x == nil)?"":x}
但是你应该在这种情况下添加间距或使用Object#nil?
方法。