代码'////'.split('/')导致[].虽然我期待它['', '', '', '', ''].如果这是红宝石的一个特征,为什么这样设计呢?
Ser*_*sko 17
您不能通过分隔符拆分分隔符字符串.
您应该将limit作为第二个参数传递给split函数以实现此行为
'////'.split('/',-1)
=> 
["", "", "", "", ""]
如果省略limit参数,则禁止尾随空字段.如果limit是正数,则最多将返回该字段数(如果limit为1,则整个字符串将作为数组中的唯一条目返回).如果为负数,则返回的字段数没有限制,并且不会抑制尾随空字段
Мал*_*евъ 10
对split方法行为的研究表明它是优化的结果,它简单地在最后一次匹配后裁剪出空数组元素,如下所示:
'////'.split('/')
=> []
'//a//'.split('/')
=> ["", "", "a"]
这种设计为解析带有尾随分隔符的字符串提供了便利。例如:
\n\n'1\xe2\x90\xa32\xe2\x90\xa33\xe2\x90\xa3\xe2\x90\xa3'.split('\xe2\x90\xa3')现在将给予['1', '2', '3']而不是['1', '2', '3', '', '']。
此功能只是为了简化工作流程。
\n\n然而,我不喜欢这个功能,因为它破坏了这个方法的纯粹性。要达到上面的效果,只需要在和rstrip('\xe2\x90\xa3')之间多加一个即可。'1\xe2\x90\xa32\xe2\x90\xa33\xe2\x90\xa3\xe2\x90\xa3'split('\xe2\x90\xa3')