为什么a,b = [nil,nil]在Ruby中为真?

问题描述

我正在学习Ruby,但我不明白为什么要进行测试

if (a,b = [nil,nil]) # <--
  true
else
  false
end

评估为真实,而

if (a,b = nil) # <--
  true
else
  false
end

虚假宣传。

通过irb在ruby 2.5和2.7上进行了测试。为复制粘贴测试添加了完整的if-else语句。

解决方法

赋值与赋值右操作数的值相同。对于销毁任务仍然如此。

因此a,b = [nil,nil]的取值为[nil,nil],这是正确的,因为它是一个数组,而数组是真实的,而a,b = nil的取值为nil,这是虚假的。

,

在ruby中,只有2个值为false,即const items = [{ _id: "1",name: "avocado",quantity: 50 },{ _id: "2",name: "pasta",quantity: 60 }] function addItems(newItem) { const index = items.findIndex((curItem) => curItem.name === newItem.name); if (index >= 0) { return items.map((curItem,curIndex) => { return index === curIndex ? { ...curItem,quantity: curItem.quantity + newItem.quantity } : curItem; }); } else { return items.concat(newItem); } } console.log('Current items',items); console.log('Adding a known item',addItems({ _id: "1232",quantity: 50 })); console.log('Adding a new item',addItems({ _id: "23232332",name: "meat",quantity: 50 }));nil本身。

所有其他值均为真,包括nil数组。

此外,分配操作返回分配的右侧,所以

false