2012-07-25 112 views
2

我已经离开了ruby一段时间,并且在1.9.3中发现了一些非常奇怪的东西(至少对我来说)。也许有人可以向我解释。奇怪的是“ n”vs' n'

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

最终我追查到使用单引号代替双引号的问题。也就是说string.split("\n")

在跟踪下来的过程中,我发现了一些东西

  1. '\n'.ord == 92
  2. "\n".ord == 10
  3. '\'.ord无效红宝石
  4. '\\'.ord == 92

唯一我有的理论就是那个单一的现实tes导致ruby不解析字符串,因此将\n视为两个字符。但是,如果这是为什么'\'不能通过处理器?

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

P.S.下面是一些测试代码来说明我的观点

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

回答

3

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

6

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

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

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

+3

此外,在单引号字符串中,反斜杠仅用于转义单引号,这就是为什么'''。ord'在语法上不正确的原因。 – Fraxtil 2012-07-25 02:44:12

+1

@Fraxtil啊,这是有道理的。谢谢。请让这个答案 – diedthreetimes 2012-07-25 02:45:56

+0

@Fraxtil尼斯加法:) – xdazz 2012-07-25 02:47:40

1

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