Ruby on rails 困惑:Ruby中为零

Ruby on rails 困惑:Ruby中为零,ruby-on-rails,ruby,parameters,param,Ruby On Rails,Ruby,Parameters,Param,我正在开发iOS应用程序,通常使用Objective C和little ruby。假设我在目标C中有以下代码: if ([!propertyA isEqual:propertyB]) { // Execute logic in here. } 如果我的propertyA是nil,那么If的条件将是nil,并且不会执行If中的逻辑 然而,我试图在ruby中检查类似的东西,这一次,当我的第一个参数为nil时,执行if中的逻辑 Ruby代码: 在我的参数列表中,我没有“some_param”,因此当

我正在开发iOS应用程序,通常使用Objective C和little ruby。假设我在目标C中有以下代码:

if ([!propertyA isEqual:propertyB])
{
// Execute logic in here.
}
如果我的propertyA是nil,那么If的条件将是nil,并且不会执行If中的逻辑

然而,我试图在ruby中检查类似的东西,这一次,当我的第一个参数为nil时,执行if中的逻辑

Ruby代码:

在我的参数列表中,我没有“some_param”,因此当执行上述if代码时,它更像:

if nil != params[:other_name]
这个条件被证明是真的,并且if中的逻辑被执行。但是,如果我在比较两个参数之前为params[:some_param]添加一个检查,那么if中的逻辑就不会执行,这正是我想要的

那么我是否总是要检查参数是否存在?不应该是零params[:other_name]会导致nil并避免在if中执行


我只是想在这里避免额外的参数检查。

您使用的是布尔值,因此它不会计算为零

你可以这样做

if params.fetch(:some_param, params[:other_param]) != params[:other_param]
fetch返回一个默认值if:some_param为nil,这样您将获得相等值,并且逻辑将被跳过,但不确定在这种情况下它是否表达

这样你就可以把苹果和苹果进行比较了


一般来说,最好使用带有合理默认值的fetch,而不是nil检查

我认为在Ruby中无法避免双重检查。我假设Objective-C示例就是if![propertyA相等:propertyB]。如果是这样,如果propertyA为nil,则括号内的代码将执行,因为[nil isEqual:propertyB]给出0,并且!0是1。这里编写的代码在propertyA为nil时实际上无效,因为否定NULL不会产生有效指针。
if params.fetch(:some_param, params[:other_param]) != params[:other_param]