//
和''
之间的区别是什么?
123.to_s.split(//) #=> ["1", "2", "3"]
123.to_s.split('') #=> ["1", "2", "3"]
两者都给出相同的结果。
什么是//
?
答案 0 :(得分:4)
Q1 :''
是一个空字符串,而//
是一个空的Regexp
:
2.0.0p247 :001 > ''.class
# => String
2.0.0p247 :002 > //.class
# => Regexp
在确定要拆分的内容时, String#split
碰巧接受了Strings和Regexp对象。因为向String添加空String不会更改字符串,所以可以将该字符串视为'1' + '' + '2' + '' + '3'
。因此,拆分空字符串会将原始字符串分解为单个字符。
类似地,空的正则表达式匹配字符旁边的任何位置,因此split
在这种情况下也会分裂每个字符。这就是为什么他们有相同的结果。
Q2 我想不出很多(任何?)用于空Regexp:)
编辑:@sawa是正确的。谦卑地更新。
答案 1 :(得分:3)
1 ''
是一个字符串,//
是正则表达式。
可以假设字符中与字符相邻的任何位置都隐式包含''
。换句话说,将''
添加到字符串中的位置不会更改字符串的内容:
'' + 'foo' # => 'foo'
'foo' + '' + 'bar' # => 'foobar'
'foo' + 'bar' # => 'foobar'
'foo' + '' # => 'foo'
因此,字符串'abc'
可以被视为'a'
+ ''
+ 'b'
+ ''
+ 'c'
,因此,按'abc'
分割''
会产生['a', 'b', 'c']
。
同样,字符中与字符相邻的任何位置都与//
匹配。因此,'abc'
分割//
会产生['a', 'b', 'c']
。
2特定的正则表达式//
可能没有用,但一般的正则表达式很有用,没有理由特别禁止//
。