为什么if(a,b=[nil,nil])在Ruby中是真的?

为什么if(a,b=[nil,nil])在Ruby中是真的?,ruby,if-statement,Ruby,If Statement,我现在正在学习Ruby,我不明白为什么测试条件 if(a,b=[nil,nil])#赋值的值与赋值的右操作数相同。这仍然适用于分解分配 因此a,b=[nil,nil]计算为[nil,nil],这是真实的,因为它是一个数组,数组是真实的,而a,b=nil计算为nil,这是错误的。

我现在正在学习Ruby,我不明白为什么测试条件


if(a,b=[nil,nil])#赋值的值与赋值的右操作数相同。这仍然适用于分解分配


因此
a,b=[nil,nil]
计算为
[nil,nil]
,这是真实的,因为它是一个数组,数组是真实的,而
a,b=nil
计算为
nil
,这是错误的。

nil
false

所有其他值都是真值,包括nil数组

另外,assign操作返回赋值的右侧,所以

(a,b = [nil, nil]) == [nil, nil]
(a,b = nil) == nil

@sepp2k在22秒前发送了答案。不过,你还是会得到一张赞成票。:)一个像我这样的ruby新手认为应该是经过解构的值来评估真实性。我想这很容易成为一只会困扰我好几个小时的虫子。@Nogurenn哪只?也就是说,
a,b=[true,false]
应以某种方式计算为
true
false
。这就是为什么我希望
[nil,nil]
是falsy。我假设它将使用
逻辑从左到右测试每个值。我首先意识到它太模糊了。@Nogurenn注意,if语句的条件是使用与任何其他上下文中相同的求值规则求值的。然后它简单地检查这个值是否真实。因此,如果a,b=[true,false]
执行
时检查的真实性值与运行
p(a,b=[true,false])
时打印的值相同。我认为很明显,
p(a,b=[true,false])
打印出一个布尔值没有多大意义。@Nogurenn:“像我这样的ruby新手认为应该是经过解构的值来评估真实性。”——没错。价值观。复数的如何表示多个值?使用数组。数组的布尔值是多少?