Ruby中如何正确使用三元运算符?转换if else出现语法错误怎么解决
问题原因
你的代码报错和三元运算符的长度无关,核心是p方法和后续参数的左括号之间多了多余的空格,触发了Ruby的语法解析歧义。
当方法名和参数列表的左括号之间存在空格时,Ruby会将括号内的内容识别为独立表达式,而非方法的入参,因此抛出unexpected local variable or method, expecting 'do' or '{' or '('的错误。
正确实现方案
推荐写法(最简洁)
直接将p方法提到三元运算符外侧,利用三元运算符本身会返回匹配分支结果的特性,只需要写一次p即可,同时规避空格导致的语法问题:
def greet(person_1, person_2=nil) p person_2.nil? ? "Hey " + person_1 : "Hey " + person_1 + " and " + person_2 end greet("Chao") greet("Chao", "Arittro")
运行结果和你原始的if-else版本完全一致。
保留分支内调用p的修复写法
如果你要保留在三元分支内分别调用p的写法,只需要去掉p和左括号之间的空格即可:
def greet(person_1, person_2=nil) person_2.nil? ? p("Hey " + person_1) : p("Hey " + person_1 + " and " + person_2) end
额外优化建议
可以用Ruby的字符串插值替代字符串拼接,代码可读性更高:
def greet(person_1, person_2=nil) p person_2.nil? ? "Hey #{person_1}" : "Hey #{person_1} and #{person_2}" end
内容的提问来源于stack exchange,提问作者David Venegas
相关产品推荐
相关产品推荐

