2

私はしばらくの間ルビーから離れていましたが、1.9.3で(少なくとも私にとっては)非常に奇妙なことに気づきました。おそらく誰かが私にそれを説明することができます。

文字列を行に分割しようとしていたので、そうしましたstring.split('\n')が、これは私に地獄を与えていました。

最終的に、二重引用符の代わりに一重引用符を使用することで問題を突き止めました。あれはstring.split("\n")

これを追跡する過程で、私はいくつかのことに気づきました

  1. '\n'.ord == 92
  2. "\n".ord == 10
  3. '\'.ord有効なルビーではありません
  4. '\\'.ord == 92

私が持っている唯一の理論は、一重引用符によってルビーが文字列を解析せず、したがって\n2文字として扱われるというものです。しかし、これが事実である場合、なぜ'\'プロセッサを通過しないのですか?

私は何かが足りないのですか?文字列を正しいASCIIに分割変換しないのはなぜですか?

PSこれが私のポイントを説明するためのいくつかのテストコードです

"asdf\nasdf".split('\n').size #=> 1
"asdf\nasdf".split("\n").size #=> 2
4

3 に答える 3

6

'\n'\2文字と。を含む文字列nです。

"\n"は1文字を含む文字列であり、ASCIIコードを含む改行文字(LF)です10

二重引用符を使用する場合、\は特殊文字をエスケープするために使用されます。

于 2012-07-25T02:43:15.647 に答える
3

xdazzの情報に加えて'\'.ord、バックスラッシュが次の一重引用符をエスケープするため、構文的に正しくありません。'\\'.ord代わりにその目的で使用してください。

于 2012-07-25T02:47:04.823 に答える
1

二重引用符は文字列内で解釈/処理を行うため、"\n"は改行で'\n'あり、は\とnです。

于 2012-07-25T09:07:08.470 に答える