Can someone explain to me why "\n".length returns 1 and '\n'.length returns 2?
Asked
Active
Viewed 1,590 times
4
sawa
- 160,959
- 41
- 265
- 366
appostolis
- 2,284
- 2
- 12
- 15
-
3Read this - http://en.wikibooks.org/wiki/Ruby_Programming/Strings ... – Arup Rakshit May 02 '14 at 18:53
-
1I should have thought that actually, how the single and double quotes work in general. I just had in my mind that the double quotes are only for string interpolation and I use single only when I'm 100% sure that my object is a string. – appostolis May 02 '14 at 18:59
2 Answers
9
Because backslash escape sequences are not processed in single-quoted strings. So "\n" is a newline (which is one character), but '\n' is literally a backslash followed by an 'n' (so two characters). You can see this by asking for each string's individual characters:
irb(main):001:0> "\n".chars #=> ["\n"]
irb(main):002:0> '\n'.chars #=> ["\\", "n"]
..or just by printing them out:
irb(main):001:0> puts "a\nb"
a
b
irb(main):002:0> puts 'a\nb'
a\nb
Mark Reed
- 86,341
- 15
- 131
- 165
4
Double quoted strings in ruby are sensitive to escape sequences. \n is an escape sequence for a "newline" character (ascii 0x0A). However, single quoted strings in ruby do not look for escape sequences, so your second string is a literal backslash character, followed by a literal n.
alexsanford1
- 3,397
- 1
- 18
- 23