3
  1. //和这里有什么区别''

    123.to_s.split(//)  #=> ["1", "2", "3"]
    123.to_s.split('')  #=> ["1", "2", "3"]
    

    两者都给出相同的结果。

  2. //为了什么?

4

2 回答 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 回答