“\ n”与'\ n'的奇怪之处

时间:2012-07-25 02:40:38

标签: ruby string

我已经离开红宝石一段时间了,我在1.9.3中发现了一些非常奇怪的事情(至少对我而言)。也许有人可以向我解释。

我试图将一个字符串分成几行,所以我做了string.split('\n'),但是这给了我地狱。

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

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

  1. '\n'.ord == 92
  2. "\n".ord == 10
  3. '\'.ord无效红宝石
  4. '\\'.ord == 92
  5. 我唯一的理论是单引号会导致ruby不解析字符串,因此将\n视为两个字符。但是,如果是这种情况,为什么'\'没有通过处理器?

    我错过了什么吗?为什么不拆分将字符串转换为正确的ascii?

    P.S。这里有一些测试代码来说明我的观点

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

3 个答案:

答案 0 :(得分:6)

'\n'是一个包含2个字符\n的字符串。

"\n"是一个字符串,包含1个char,新行char(LF),带有ascii代码10

使用双引号时,\用于转义特殊字符。

答案 1 :(得分:3)

除了xdazz的信息之外,'\'.ord在语法上是不正确的,因为反斜杠会转义以下单引号。请改为使用'\\'.ord

答案 2 :(得分:1)

双引号在字符串中进行解释/处理,因此"\n"是换行符,而'\n'是\和n。