红宝石中数组和范围之间有什么区别?

loc*_*boy 1 ruby arrays range

只是想知道数组和范围之间的细微差别是什么.我遇到了一个示例,我将x = *(1..10)x作为数组输出并*(1..10) == (1..10).to_a抛出错误.这对我来说意味着两者之间存在细微差别,我只是好奇它是什么.

Joh*_*lla 7

首先,当您不在赋值或参数传递的中间时,*(1..10)语法错误是因为splat运算符不会以这种方式解析.这与数组或范围本身并不真正相关,但我想我会清楚为什么这是一个错误.

其次,数组和范围实际上是苹果和橙子.数组是一个对象,它是任意元素的集合.范围是具有"开始"和"结束"的对象,并且知道如何从开始移动到结束而不必枚举其间的所有元素.

最后,当你将一个范围转换为一个数组时to_a,你并没有真正"转换"它,就像你说的那样,"从这个范围的开头开始,一直给你元素,直到你到达终点".在"(1..10)"的情况下,范围为1,然后是2,然后是3,依此类推,直到达到10.