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 と Regexp オブジェクトの両方を受け入れます。空の String を String に追加しても文字列は変更されないため、文字列は と考えることができます'1' + '' + '2' + '' + '3'。したがって、空の文字列に対して分割すると、元の文字列が個々の文字に分割されます。

同様に、空の Regexp は文字の隣の任意の位置に一致するためsplit、この場合もすべての文字で分割されます。それが彼らが同じ結果を持っている理由です。

Q2空の Regexp の多くの (どれか?) 用途を思いつきません :)

編集:@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 に答える