Ruby .split行为不一致

dar*_*mkd 2 ruby

假设我有这个:

a = "|hello"
Run Code Online (Sandbox Code Playgroud)

如果我做:

a.split("|") #=> ["", "hello"]
Run Code Online (Sandbox Code Playgroud)

现在说我有:

b = "hello|"
Run Code Online (Sandbox Code Playgroud)

如果我做:

b.split("|") #=> ["hello"]
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我期待结果["hello", ""],类似于第一个例子.这种split方法工作不一致.或者是否有一些我不了解的内在工作?

Ily*_*lya 9

文档中描述了此行为:

如果省略limit参数,则禁止尾随空字段.

如果要保存尾随空字符串,只需添加正数或负数限制,作为文档提供:

"hello|".split('|', 2)
 #=> ["hello", ""]
"hello|||".split('|', -1)
 #=> ["hello", "", "", ""]
Run Code Online (Sandbox Code Playgroud)

注意

如果为负数,则返回的字段数没有限制,并且不会抑制尾随空字段.

  • @daremkd a)空字段b)因为它是以这种方式实现的. (2认同)