为什么我在哈希文字中使用三元运算符会出错?

sep*_*err 0 ruby

做类似下面的事情会产生错误.

x = ""
h = {:a => x==nil?"":x}
Run Code Online (Sandbox Code Playgroud)

错误:

syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
h = {:a => x==nil?"":x}
Run Code Online (Sandbox Code Playgroud)

是否无法在哈希文字定义中使用三元运算符?

Cez*_*zar 7

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

x==nil?解释器中正在考虑将?nil作为对nil?方法的调用.那么三元运算符的其余部分实际上是一个语法错误,因为你没有一个格式良好的运算符,因为?它不是它的一部分.

您应该使用适当的间距输入的内容是:

h = {:a => x == nil ? "" : x}
Run Code Online (Sandbox Code Playgroud)

哪个可以更好地表达为:

h = {:a => x.nil? ? "" : x}
Run Code Online (Sandbox Code Playgroud)

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

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