问号和冒号 – 如果在ruby中

嗨我有关于铁轨上的ruby的问题

显然我有这样的声明:

def sort_column Product.column_names.include?(params[:sort]) ? params[:sort] : "name" end 

根据我的阅读,据说这种方法基于params [:sort]对列进行排序,如果没有params,产品将按“name”排序。 但是,我不明白这个陈述的写法,特别是第二个“?”。 有人可以向我解释一下吗?

这是您的代码,重新排列以便于理解。

 def sort_column cond = Product.column_names.include?(params[:sort]) cond ? params[:sort] : "name" # it's equivalent to this # if cond # params[:sort] # else # 'name' # end end 

第一个问号是方法名称的一部分,第二个问号是三元运算符的一部分(您应该阅读它)。

?:是一种以三种语言存在的三元运算符 。 它具有以下语法:

 expression ? value_if_true : value_if_false 

在Ruby中,它是一个较短的版本:

 if expression value_if_true else value_if_false end 

该行大致翻译为:

 if Product.column_names.include?(params[:sort]) params[:sort] else "name" end 

的? :是三元运算符; 简短的if-else的简写。

 Product.column_names.include?(params[:sort]) ? params[:sort] : "name" 

第一个问号是方法名称的一部分: include?

第二个问号和冒号是三元操作数的一部分:( (if this is true) ? (do this) : (else, do that). (if this is true) ? (do this) : (else, do that).

这意味着,如果Product.column_names包含params[:sort] ,它将返回params[:sort] 。 否则,它将返回"name"