//
和这里有什么区别''
?123.to_s.split(//) #=> ["1", "2", "3"] 123.to_s.split('') #=> ["1", "2", "3"]
两者都给出相同的结果。
是
//
为了什么?
问问题
77 次
2 回答
4
Q1:''
是一个空字符串,而是//
一个空Regexp
:
2.0.0p247 :001 > ''.class
# => String
2.0.0p247 :002 > //.class
# => Regexp
String#split
在决定拆分什么时碰巧同时接受字符串和正则表达式对象。因为将空字符串添加到 String 并不会更改字符串,所以可以将字符串视为'1' + '' + '2' + '' + '3'
. 因此,对空字符串进行拆分会将原始字符串分解为单个字符。
类似地,一个空的正则表达式匹配一个字符旁边的任何位置,所以split
在这种情况下也会分割每个字符。这就是为什么他们有相同的结果。
Q2我想不出很多(任何?)空正则表达式的用途 :)
编辑:@sawa 是正确的。虚心更新。
于 2013-07-09T03:31:04.050 回答
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 特定的正则表达式//
可能没有用,但一般的正则表达式是有用的,没有理由特别禁止//
。
于 2013-07-09T05:06:33.353 回答