问号和冒号 - 如果在红宝石中

u19*_*964 8 ruby ruby-on-rails ternary-operator

嗨我有关于铁轨上的红宝石的问题

显然我有这样的声明:

def sort_column
    Product.column_names.include?(params[:sort]) ? params[:sort] : "name"
end
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*sev 16

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

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
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*ira 10

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

expression ? value_if_true : value_if_false
Run Code Online (Sandbox Code Playgroud)

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

if expression
  value_if_true
else
  value_if_false
end
Run Code Online (Sandbox Code Playgroud)