只是想知道數組和範圍之間的細微差別是什麼。我碰到一個例子,我有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-每個)。 –