//とここはどう違い''ますか?123.to_s.split(//) #=> ["1", "2", "3"] 123.to_s.split('') #=> ["1", "2", "3"]どちらも同じ結果になります。
何
//のためですか?
2 に答える
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は正しいです。さりげなく更新。
1''は文字列で//、正規表現です。
文字に隣接する文字列内の任意の位置には、暗黙的に が含まれていると見なすことができます''。つまり、文字列内の位置に追加''しても、文字列の内容は変更されません。
'' + 'foo' # => 'foo'
'foo' + '' + 'bar' # => 'foobar'
'foo' + 'bar' # => 'foobar'
'foo' + '' # => 'foo'
したがって、文字列は+ + + +'abc'と見なすことができるため、 で分割するとになります。'a''''b''''c''abc'''['a', 'b', 'c']
同様に、文字に隣接する文字列内の任意の位置が に一致し//ます。したがって、 で割る'abc'と に//なります['a', 'b', 'c']。
2 特定の正規表現//は役に立たないかもしれませんが、正規表現は一般的に有用であり、特に禁止する理由はありません//。