Ruby on rails Ruby语法错误

Ruby on rails Ruby语法错误,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个非常简单的测试代码: s="helloCustomer" is_contain_customer = s=='helloCustomer' || s.include? 'Customer' ? 'YES' : 'NO' 对于代码中的第二行,我收到了错误消息意外的tSTRING_BEG 为什么?将您的s括在括号中: s.include?('Customer') 除了语法错误(如果语法不明确,则需要在方法args周围加括号),您的代码也可能不够清晰 您使用的是| | vs?的更高优先级

我有一个非常简单的测试代码:

s="helloCustomer"

is_contain_customer = s=='helloCustomer' || s.include? 'Customer' ? 'YES' : 'NO'
对于代码中的第二行,我收到了错误消息意外的tSTRING_BEG


为什么?

将您的
s括在括号中:

s.include?('Customer')

除了语法错误(如果语法不明确,则需要在方法args周围加括号),您的代码也可能不够清晰

您使用的是| | vs?的更高优先级:使表达式最终返回“是”或“否”

为了可读性和可维护性,我建议您添加括号以明确目的:

is_contain_customer = 
     (s=='helloCustomer' || s.include?('Customer')) ? 'YES' : 'NO'

另外,如果使用Rails或其他MVC系统,最好使用视图层将数据(布尔值)转换为字符串

正如拉里·克(Larry K)所说,括号既修复了错误,又使其更具可读性;但是,在这种情况下,我认为为了可读性,我会让它更详细一些:

if (s=='helloCustomer' || s.include?('Customer'))
  is_contain_customer = 'YES'
else
  is_contain_customer = 'NO'
end
同样正如Larry K所说,如果这是在控制器或模型中,我会使用
true
false
,然后让视图决定显示什么文本。如果以后将其用于逻辑,那么您就不必再做一些愚蠢的事情,比如
If is\u contain\u customer==“YES”
,而它可以是
If is\u contain\u customer

如果您需要不止一次地执行此操作,我会更进一步,并从中生成一个函数

def is_customer?(s)
  s=='helloCustomer' || s.include?('Customer')
end

这使得它很容易在逻辑或视图帮助程序中使用(取决于您定义它的位置)

同意,在这种情况下最好是明确的。没有parens,这很容易混淆。