在创建变量时使用Ruby的`或`关键字

时间:2016-10-26 00:40:44

标签: ruby

我最近遇到了以下Ruby代码,这让我很困惑:

def initialize(kind, street_1, street_2, city, state, postal_code)
  @kind = kind or ''
  @street_1 = street_1 or ''
  @street_2 = street_2 or ''
  @city = city or ''
  @state = state or ''
  @postal_code = postal_code or ''
end

我不明白or在此代码中扮演的角色。有人可以解释一下吗?

3 个答案:

答案 0 :(得分:5)

编辑:应该注意or关键字在这种情况下不起作用,但目的是正确的 - 使用||代替or在这个例子中将产生所需的输出。

此代码中的or关键字表示如果分配给局部变量的参数(分别为kind@kind)为nil,则值为应将局部变量初始化为''

另一种看待这种情况的方法 - 如果我调用Class.new("something", "1800 Wallaby Way", nil, nil, nil, nil),那么该类将被初始化为:

@kind = "something"
@street_1 = "1800 Wallaby Way"
@street_2 = ''
@city = '
@state = ''
@postal_code = ''

答案 1 :(得分:3)

你有三种解决方法。第一个是使用括号使松散绑定or不会失去对值的控制:

@kind = (kind or '')

第二种是使用强绑定||等效运算符:

@kind = kind || ''

第三种选择,这是最好的,是不在乎而且只是交易:

@kind = kind.to_s

这样nil会自动转换为空字符串,如果这是您想要的行为。

答案 2 :(得分:0)

如果您在创建看似是"地址"的新实例时未指定每个变量,则添加默认值。对象

EG。

x = Address.new ()

x.kind == ''

# evaluates to true