2013-12-14 69 views
14

該代碼'////'.split('/')結果爲[]。雖然我預計它是['', '', '', '', '']。如果這是ruby的一個特性,爲什麼它是這樣設計的?'////'split('/')爲什麼產生[]?

+0

+1 ..因爲問一個好問題...... :) –

+2

雖然這個問題很有趣,但它並不是最好的形式。您的問題可能會誤導讀者,認爲連續四次斜線對此效果都很重要,但事實並非如此。您將以較短的斜線序列獲得相同的結果。 – sawa

回答

3

此設計爲解析具有尾隨分隔符的字符串提供了便利。例如:

'1␣2␣3␣␣'.split('␣')現在將給['1', '2', '3']而不是['1', '2', '3', '', '']

此功能僅用於簡化工作流程。

但是,我不喜歡這個功能,因爲它打破了這種方法的純度。爲了達到上述效果,您只需要在'1␣2␣3␣␣'split('␣')之間的額外rstrip('␣')

+8

'('␣')'看起來很可愛。 –

17

不能用分隔符分隔字符串分隔符。

你應該傳遞極限作爲第二個參數分裂函數來實現這種行爲

'////'.split('/',-1) 
=> 
["", "", "", "", ""] 

如果省略了限制參數,尾隨空字段被抑制。如果limit是一個正數,那麼將返回最多數量的字段(如果limit爲1,則整個字符串將作爲數組中唯一的條目返回)。如果爲負值,則返回的字段數沒有限制,並且尾部空字段不會被抑制

+2

* + 1 * ..我做了... :)但是你可以從[doc](http://www.ruby-doc.org/core-2.0.0/String.html#method-i-拆分)like - **如果限制參數被省略,則尾隨空字段被抑制**。如果limit是一個正數,那麼將返回最多數量的字段(如果limit爲1,則整個字符串將作爲數組中唯一的條目返回)。 **如果爲負數,則返回的字段數不受限制,並且不會限制結尾空字段。** –

+0

謝謝。真正有用的評論。 – SergeyKutsko

10

split方法的行爲調查顯示它是優化的結果,它只是在上次匹配後裁剪出空數組元素,因爲它如下所示:

'////'.split('/') 
=> [] 

'//a//'.split('/') 
=> ["", "", "a"] 
相關問題