//
とここはどう違い''
ますか?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 特定の正規表現//
は役に立たないかもしれませんが、正規表現は一般的に有用であり、特に禁止する理由はありません//
。