2017-08-01 92 views
-1

我很困惑,为什么当在程序可以继续之前结合两个应该为true的条件时,我使用'& &'出现语法错误。我是Ruby新手,没有机会亲自编写完整的程序。 我只是更新旧的程序,并通过类似于我需要更新的任何代码。红宝石语法错误在多种情况下使用&&

这里是我的代码:

def drug_dispensation_condition(charge) 
    return true if ['250','251'].include? charge[:rev_code] 
    return true if ['981262'].include? charge[:cdm_code] 
    return true if ['300'].include? charge[:rev_code] && ['86580'].include? charge[:cdm_code] #this line is inserted 
    false 
end 

这里是我的错误信息:

语法错误,意想不到的tIDENTIFIER,期待keyword_end (SyntaxError错误)... E] & & [ '86580'] 。包括?费:cdm_code]

我添加了第三届“返回true”条款包括rev_code 300和cdm_code 86580. 我同时需要rev_code 300和cdm_code 86580申报陈述为真,所以我需要在它们之间添加“& &”。它看起来像是在“charge [:rev_code]”之后,而不是第二个条件,期待“结束”。

是否有任何其他的方式来编码,以避免语法错误?

回答

2

由于这是一条单线声明,请将include?参数括号:

return true if ['300'].include?(charge[:rev_code]) && ['86580'].include?(charge[:cdm_code]) 

我认为你可以让它更具可读性一点点:

def drug_dispensation_condition(charge) 
    if ['250', '251', '300'].include?(charge[:rev_code]) || 
    ['981262', '86580'].include?(charge[:cdm_code]) 
    return true 
    end 
    false 
end 
+1

另一个要考虑的是'回归TRUE'当评估一个布尔条件是一种浪费。只是表示逻辑原样,这是隐式返回。 – tadman

+0

我不想把所有的代码放在一起,因为如果rev_code'300'和cdm_code'86580'都存在,我只希望它成为True。这就是我为什么单独编码的原因。其他代码独立于我的新代码。我是否仍然可以使用“&&”来添加对象? – malex

+0

我用([charge [:rev_code])和(charge [:cdm_code])上的圆括号试了一下。我得到了另一个语法错误,意外的tLPAREN_ARG,期待keyword_end(SyntaxError)..._ code])&& ['86580']。include? (电荷[:cdm_code])。只是好奇,是“包括”之间的空间吗?和“(charge”有什么区别? – malex