4

有没有更惯用的方法来返回布尔值#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
4

3 回答 3

7

您可以使用双重否定:

def survey_completed?
  !!survey_completed_at
end
于 2013-08-16T11:16:16.790 回答
2
  def survey_completed?
    !survey_completed_at.nil?
  end
于 2013-08-16T11:19:49.523 回答
0

在 Ruby 中执行此操作的惯用方法是不执行此操作。false除了和nil评估之外的每个对象true在布尔上下文中因此,您的survey_completed_at功能已经服务于survey_completed?功能的目的。

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

于 2013-08-16T21:04:04.357 回答