回答
表達式2..10
使用..
運算符創建一個Range
對象。
一般而言,*
可以將數組展平,以便將單個對象轉換爲方法的單個參數列表。當應用於非數組對象時,它將嘗試首先通過調用to_a
將對象轉換爲Array
。因此,將*
應用到Range
上首先調用to_a
,它返回位於該範圍內的值的數組。該陣列然後被平鋪爲*
的值列表。
最後,將該值列表放在方括號內[
... ]
會生成新的Array
。這與Range
上to_a
的調用結果相同,但它沿途經過了一些額外的步驟(平坦化爲*
,並且解除了[]
)。
注意,在賦值的右邊,你可以不用方括號,文字(x=1,2,3
得到相同的結果x=[1,2,3]
)或splatted是否(x=*2..10
產生相同的結果x=[*2..10]
)。
'[]'是一個數組字面值,對任何事物來說,它都不是語法糖。 –
謝謝,Jörg。固定。 –
或(1..5).to_a
。
還銘記記住這x..y
包括在範圍y
,但x...y
包括直到y
,即:
(1...5).to_a
產生[1,2,3,4]
。
如果接收器是一個陣列,則splat運算符*
解包接收器的元素。如果接收方不是數組,則使用方法to_a
預先嚐試隱式類轉換。
在你的情況,範圍2..10
不是數組,所以to_a
嘗試,其成功,因爲Range#to_a
被定義,並給出了[2, 3, 4, 5, 6, 7, 8, 9, 10]
。 splat操作符在外部[]
內解開該數組的元素,導致[2, 3, 4, 5, 6, 7, 8, 9, 10]
。
- 1. FileMaker Pro 10 - 同步性如何工作?
- 2. solaris 10鍵如何讓它們工作
- 3. Zend 2 Validators如何工作?
- 4. JSF 2 ConversationScope如何工作?
- 5. oAuth 2如何工作?
- 6. 如何在JavaScript中使用10 ==「10」的情況下工作==?
- 7. Pirc bot「2/10」不等於「2/10」
- 8. 工作了浮點數基地2個,10和16
- 9. .Net Framework 2應用程序無法在Windows 10上工作
- 10. 提琴手2或4不在窗口中工作10
- 11. CHAR(10)工作有時
- 12. CFQUERYPARAM ColdFusion中不工作10
- 13. rTesseract不工作Windows 10
- 14. CakePHP 2中的Set :: nest如何工作?
- 15. 角2 Renderer2 - 它是如何工作
- 16. Ruby http-2實現:eof如何工作?
- 17. MVC 2 UpdateModel - 它是如何工作的?
- 18. 如何讓kCGPathStroke在Swift 2中工作?
- 19. main.d.ts如何在角度2中工作?
- 20. 如何獲得2 post_type互相工作
- 21. 如何1 = 2 = 3然後(...)的工作
- 22. **如何在2維數組中工作?
- 23. Observable如何在Angular 2中工作
- 24. HTTP/2和CNAME如何協同工作?
- 25. [n&1]和[n%2]如何工作?
- 26. 計算2^10
- 27. 如何讓程序工作10秒?並在10秒後程序將停止
- 28. 如果一個單元格> 10複製並粘貼到工作表2
- 29. 如何驗證AoT是否在工作[Webpack 2,Angular 2]?
- 30. JPG和GIF如何在IE 9/10/11中拖放工作?
它在Ruby語法中定義。它的工作原理是因爲他們將其定義爲可行 – lurker
請查看http://stackoverflow.com/questions/918449/what-does-the-unary-operator-do-in-this-ruby-code,以及問題右側的鏈接答案。 –
此外,「splat」測試是查看它應該做什麼的好方法:https://github.com/rubyspec/rubyspec/blob/master/language/splat_spec.rb –