在ruby中不返回false是否等于a!变量



在我的rails项目中,我在模块中定义了以下方法:

  def self.create_response_backup
    response_backup = ResponseBackup.new(location_name: site.site_name, response_data: response_json)
    if !response_backup
      return response_backup.errors.full_messages.to_sentence
    end
    return response_backup
  end

我的问题是:

如果我这样做了,if create_response_backup ... else ... end这个方法应该返回除true以外的任何值吗?它知道跳到其他部分吗?或者,因为它返回的值不是false,它会在if语句的顶部继续吗?

换句话说,我应该这样做:if create_response_backup == true ... else ... end

https://gist.github.com/jfarmer/2647362给出了Ruby中truthy和falsy值的良好概述。相对于您上面的代码,

return response_backup.errors.full_messages.to_sentence

将导致返回一个非零字符串,该字符串的求值结果为truthy。

如果你有一个If语句:

if create_response_backup
    puts "A"
else
    puts "B"
end

我希望上面的代码只输出A(response_backup.errors.full_messages.to_sentence中的某些内容被评估为nil并引发nil值错误的情况除外)

看起来if create_response_backup总是求值为true,除非response_backup.errors.full_messages.to_sentence曾经是nilfalse

Ruby在if条件中将对象求值为true。您的方法将始终返回一个ResponseBackup对象或值或response_backup.errors.full_messages.to_sentence(我假设它是一个String)。

如果你想验证备份是否已创建,你可以进行

if create_response_backup.class == ResponseBackup ... else ... end

根据该方法的更广泛范围,您需要决定是对返回值进行检查更好,还是重构该方法以返回true或false更好。

最新更新