簡體   English   中英

[* 2..10]如何工作?

[英]How does [*2..10] work?

要填充數組,我可以寫[*2..10] ,得到[2, 3, 4, 5, 6, 7, 8, 9, 10] [*2..10] [2, 3, 4, 5, 6, 7, 8, 9, 10]

這是如何運作的?

表達式2..10使用..運算符創建Range對象。

通常, *平數組,以便將單個對象轉換為方法的單個參數列表。 當應用於非數組對象時,它將首先嘗試通過調用to_a將對象轉換為Array 因此,將*應用於Range首先會對其調用to_a ,這將返回位於該范圍內的值的數組。 然后將該數組通過*平為值列表。

最后,將該值列表放在方括號[ ... ]生成一個新的Array 這與在Range上調用to_a結果相同,但是在此過程中還經過了一些額外的步驟(用*平和[] )。

請注意,在賦值的右側,您可以不使用方括號,無論是文字( x=1,2,3產生的結果與x=[1,2,3] )還是斜線( x=*2..10產生與x=[*2..10]相同的結果。

如果接收方是數組,則splat運算符*將接收方的元素解壓縮到位。 如果接收方不是數組,則使用to_a方法預先嘗試隱式類轉換。

在您的情況下,范圍2..10不是數組,因此嘗試to_a ,因為定義了Range#to_a ,所以成功了,並給出[2, 3, 4, 5, 6, 7, 8, 9, 10] Range#to_a [2, 3, 4, 5, 6, 7, 8, 9, 10] splat運算符在外部[]解壓縮該數組的元素,得到[2, 3, 4, 5, 6, 7, 8, 9, 10]

(1..5).to_a

還請記住, x..y包含y ,但x...y包含直到y ,即:

(1...5).to_a

產生[1,2,3,4]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM