Ruby惯用的方式返回一个布尔值

时间:2013-08-16 11:13:52

标签: ruby

我是否有更惯用的方式在#survey_completed?中返回布尔值 这就是我在C#中做的事情,我一直认为返回false的最后一个三元句是多余的,所以Ruby有更好的方法可以做到这一点吗?

这就是我的代码目前的样子:

  def survey_completed?
    self.survey_completed_at ? true: false
  end

  def survey_completed_at
    # Seeing as the survey is submitted all or nothing, the time the last response is persisted
    # is when the survey is completed
    last_response = self.responses.last
    if last_response
      last_response.created_at
    end
  end

3 个答案:

答案 0 :(得分:7)

你可以使用双重否定:

def survey_completed?
  !!survey_completed_at
end

答案 1 :(得分:2)

  def survey_completed?
    !survey_completed_at.nil?
  end

答案 2 :(得分:0)

在Ruby中执行此操作的惯用方法是不要这样做。除falsenil之外的每个对象都在布尔上下文中评估为true。因此,survey_completed_at函数已经用于survey_completed?函数的目的。

如果您收到调查回复,last_response.created_at将是非零的,因此该函数将在布尔上下文中评估为true。如果您没有收到回复且last_responsenil,则if将评估为nil,并且该函数将在布尔值上下文中评估为false