只是想知道数组和范围之间的细微差别是什么。我碰到一个例子,我有x = *(1..10)
作为一个数组输出x和*(1..10) == (1..10).to_a
引发错误。这对我来说意味着两者之间存在细微的差异,我只是好奇它是什么。ruby中的数组和范围有什么区别?
1
A
回答
6
首先,当您不处于任务或参数传递的中间时,*(1..10)
是语法错误,因为splat操作符不会以这种方式解析。这本质上并不涉及数组或范围,但我想我会清楚为什么这是一个错误。
其次,阵列和范围真的是苹果和橘子。数组是一个对象,它是任意元素的集合。范围是具有“开始”和“结束”的对象,并且知道如何从开始移动到结束而不必枚举其间的所有元素。
最后,当你将一个范围转换为一个带有to_a
的数组时,你并不是真的“转换”它,就像你说的那样,“从这个范围的开始开始,并且继续给出元素直到你到达结束”。在“(1..10)”的情况下,范围是给你1,然后2,然后3,依此类推,直到你达到10为止。
1
一个区别是,范围不单独存储每个元素本身,不像数组。
r = (1..1000000) # very fast
r.to_a # sloooooow
但是,您失去了索引到任意点的能力。
相关问题
- 1. 范围和连接有什么区别?
- 2. ColdFusion中THIS范围和APPLICATION范围有什么区别?
- 3. C中的结构和函数范围有什么区别?
- 4. Ruby和Ruby on Rails有什么区别?
- 5. Ruby中STDIN和$ stdin有什么区别?
- 6. Perl中词法和动态范围界定有什么区别?
- 7. 系统范围的vimrc和用户的vimrc有什么区别?
- 8. IEnumerable和数组有什么区别?
- 9. int和char数组有什么区别?
- 10. malloc和数组有什么区别
- 11. 数组和ArrayList有什么区别?
- 12. 字典和数组有什么区别?
- 13. 数组和散列有什么区别?
- 14. Ruby win32api和win32ole有什么区别?
- 15. Ruby on Rails和Grails有什么区别?
- 16. Ruby on rails:respond_to和respond_with有什么区别?
- 17. 安装Rubygems“本地”和“系统范围”有什么区别?
- 18. “初始范围”和“需求”有什么区别?
- 19. Angular:'='和'=?'有什么区别而在指令定义范围
- 20. 春季请求和会话范围有什么区别?
- 21. 范围和封装有什么区别? (C++)
- 22. 有什么区别:超出范围和:无效?
- 23. JPA和JDO规范有什么区别?
- 24. Smalltalk中的数组和字面数组有什么区别?
- 25. Ruby中的%w {}和%W {}大小写W数组字面量有什么区别?
- 26. 有什么区别`和$(Bash中有什么区别?
- 27. 对象的范围和它在javascript中的上下文有什么区别?
- 28. 范围(10)中的[[范围(10)]范围内的[[0]]和范围[10范围内的范围10中的[0]之间的区别是什么?
- 29. Git diff commit范围中的双点“..”和三点“...”之间有什么区别?
- 30. 本练习中的静态和动态范围界定有什么区别?
击败我吧。 +1指出该错误与Range无关。 –
“从开始移动到结束”部分是可选的,只有当范围的起始位置响应'succ'时才适用(http://ruby-doc.org/core-1.9.3/Range.html#method- I-每个)。 –