2017-03-07 27 views
-1

我想知道为什么反斜杠'\'不能正常工作。在红宝石我需要一个反斜杠,但它给了我三个

@hash["zebra"] = "African land animal with stripes" 
@hash["fish"] = "aquatic animal" 
@hash["apple"] = "fruit" 

def printable 
    hashs = @hash 
    words = Array.new 
    hashs.each {|key, value| 
     word = '['+key+'] '+ '\\"' + value +'\\"\\n' 
     words << word 
    } 
    words.sort.join("") 

end 

我希望 “[苹果] \” 水果\ “\ n [鱼] \” 水产动物\ “\ n [斑马] \” 非洲陆地动物条纹\ “”

但是我得到的是 “[apple] \\”fruit \\“\ n [fish] \\”水生动物\\“\ n [斑马] \\”带条纹的非洲陆地动物\“\ n “

所以它给了我三个反斜杠而不是一个。为什么会发生?

+0

你确定你没有得到你想要的:'puts printable#=> [apple] \“fruit \”\ n [鱼] \“水生动物\”\ n [斑马] \“非洲陆地动物与条纹\“\ N'?三个反斜杠中的前两个是单个反斜杠字符;第三个反斜杠转义下面的字符。 –

+0

是的..我不知道为什么它不起作用TT – gin85

回答

1

在ruby中,单引号中的内容是纯字符串没有特殊功能,所以在使用单引号时需要更改内容,否则你会用更好的方式使用双引号更正确的ruby风格

@hash = Hash.new 
@hash["zebra"] = "African land animal with stripes" 
@hash["fish"] = "aquatic animal" 
@hash["apple"] = "fruit" 

def printable 
    hashs = @hash 
    words = Array.new 
    hashs.each {|key, value| 
     word = '['+key+'] '+ '"' + value +'"'+"\n" #use single quote 
     word = "["+key+"] "+ "\"" + value +"\"\n" #use double quote 
     words << word 
    } 
    words.sort.join("") 
    puts words 
end 
+0

谢谢!我尝试过,它的工作原理。一件事是我刚刚意识到我需要摆脱最后的'n'。所以我需要价值后,“\”,但当我尝试“\”\“它甚至不会运行...如果我只想添加\”\最后,我应该如何改变? – gin85

+0

@ gin85 ,“\”\\“,我想你应该学会知道双引号和单引号之间的区别是什么 – Tsao

+0

我试过”\“\\”,但是在最后加了两个反斜杠而不是一个......我学会了如果两个反斜杠在一起,后来一个逃脱,但它不工作.. – gin85

0

因为一些字符需要时,他们在双引号",在这里他们的一些名单逃脱:

\ “ - 双引号(”)

\ - 单反斜线()

\一 - 铃/警报(播放一段提示音)

\ b - 退格(删除前一字符,光标移回一个位置)

\ r - 回车(移动光标到行的开头)

\ N - 换行符(移动光标到下一行)

\ S - 空间()

\吨 - 标签()

+0

换句话说,用单引号(''\ n''),意思是反斜杠n,但是用双引号('“\ n”')用换行符替换转义字符。 –

+0

非常感谢你! :-) – gin85