为什么'////'.split('/')产生[]?

时间:2013-12-14 11:56:00

标签: ruby

代码'////'.split('/')会产生[]。虽然我预计它会['', '', '', '', '']。如果这是红宝石的一个特征,为什么它的设计是这样的呢?

3 个答案:

答案 0 :(得分:17)

您不能通过分隔符拆分分隔符字符串。

您应该将limit作为第二个参数传递给split函数以实现此行为

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

如果省略limit参数,则禁止尾随空字段。如果limit是正数,则最多将返回该字段数(如果limit为1,则整个字符串将作为数组中的唯一条目返回)。如果为负数,则返回的字段数没有限制,并且不会抑制尾随空字段

答案 1 :(得分:10)

调查split方法的行为表明它是优化的结果,它只是在最后一次匹配后裁剪空数组元素,如下所示:

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

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

答案 2 :(得分:3)

此设计为使用尾随分隔符解析字符串提供了便利。例如:

'1␣2␣3␣␣'.split('␣')现在会提供['1', '2', '3']而不是['1', '2', '3', '', '']

此功能仅用于简化工作流程。

但是,我不喜欢这个功能,因为它打破了这种方法的纯度。要实现上述效果,您只需在rstrip('␣')'1␣2␣3␣␣'之间额外split('␣')