困惑:在Ruby中没有

时间:2014-07-11 21:48:06

标签: ruby-on-rails ruby parameters param

我正在使用iOS应用程序,通常使用Objective C和小红宝石。所以假设我在Objective C中有以下代码:

if ([!propertyA isEqual:propertyB])
{
// Execute logic in here.
}

如果我的propertyA为nil,那么if的条件为nil,并且其中的逻辑将不会被执行。

但是我试图在ruby中检查类似的东西,这次内部的逻辑如果在我的第一个参数为零时执行。

Ruby代码:

if params[:some_param] != params[:other_param]
# Execute this logic
end

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

if nil != params[:other_name]

如果执行该条件,则该条件为真,并且内部为逻辑。但是如果我在比较两者之前添加对params [:some_param]的检查,那么内部的逻辑if不会被执行,这就是我想要的。

所以我总是要检查参数是否存在?不应该{0}导致nil并避免在if内部执行吗?

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

1 个答案:

答案 0 :(得分:0)

您正在使用布尔值,因此它不会评估为nil

你可以这样做

if params.fetch(:some_param, params[:other_param]) != params[:other_param]
如果以下情况,

fetch返回默认值:some_param为nil,这样你就会获得相等而且会跳过逻辑,在这种情况下不确定它是否具有表现力。

这样你就可以比较苹果和苹果

一般来说,使用带有合理默认值的提取代替零检查是件好事