//和''之间的区别

时间:2013-07-09 03:29:21

标签: ruby

  1. //''之间的区别是什么?

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

    两者都给出相同的结果。

  2. 什么是//

2 个答案:

答案 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特定的正则表达式//可能没有用,但一般的正则表达式很有用,没有理由特别禁止//