2

我已经离开 ruby​​ 有一段时间了,我注意到 1.9.3 中有一些非常奇怪的东西(至少对我来说)。也许有人可以向我解释。

我试图将一个字符串分成几行,所以我做到了string.split('\n'),但这让我很痛苦。

最终我找到了使用单引号而不是双引号的问题。那是string.split("\n")

在追踪这个的过程中,我注意到了一些事情

  1. '\n'.ord == 92
  2. "\n".ord == 10
  3. '\'.ord不是有效的红宝石
  4. '\\'.ord == 92

我唯一的理论是单引号导致 ruby​​ 不解析字符串,因此将\n其视为两个字符。但是,如果是这种情况,为什么不'\'通过处理器?

我错过了什么吗?为什么 split 不将字符串转换为正确的 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 回答