我最近遇到了以下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
在此代码中扮演的角色。有人可以解释一下吗?
答案 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