2017-03-07 3 views
-1

Je me demande pourquoi le slash '\' ne fonctionne pas bien.en ruby ​​J'ai besoin d'une barre oblique, mais ça me donne trois

@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 

Je me attends "[pomme] \" fruit \ "\ n [poissons] \" \ animaux aquatiques "\ [zèbre] n \" animal terrestre d'Afrique avec des rayures \ ""

mais ce que j'ai eu était "[pomme] \\" fruit \\ "\ n [poisson] \\" animal aquatique \\ "\ n [zèbre] \\" animal terrestre africain avec des rayures \\ "\ n "

donc il me donne trois barre oblique au lieu d'un. pourquoi cela arrive?

+0

Etes-vous sûr que vous n'obtenez pas ce que vous voulez: 'puts imprimable # => [pomme] \" fruit \ "\ n [poisson] \" animal aquatique \ "[zèbre] \" Animal terrestre africain avec rayures \ "\ n'? Les deux premières des trois barres obliques inverses sont une seule barre oblique inverse; le troisième backslash échappe au caractère suivant. –

+0

oui .. je ne sais pas pourquoi ça ne marche pas TT – gin85

Répondre

1

En ruby, le contenu en guillemets simples est une pure chaîne sans fonction spéciale, donc vous devez changer le contenu lorsque vous utilisez un guillemet simple, ou vous utiliserez le meilleur moyen que le guillemet double est plus correct style 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

merci! J'ai essayé et ça marche. une chose est que je viens de réaliser que je dois me débarrasser du dernier «n». donc ce dont j'ai besoin après la valeur c'est que \ "\. mais quand j'ai essayé" \ "\" ça ne fonctionne même pas ... si je veux seulement ajouter \ "\ à la fin, comment devrais-je changer? – gin85

+0

@ gin85 , "\" \\ ", je pense que vous devriez apprendre à savoir ce qui est différent entre guillemets doubles et guillemets simples – Tsao

+0

J'ai essayé" \ "\\", mais il ajoute deux barre oblique à la fin au lieu d'une ... J'ai appris comme si deux slash sont ensemble, plus tard on s'échappe, mais cela ne fonctionne pas .. – gin85

0

Parce que certains personnages doivent échappe quand ils sont en guillemet " et voici la une liste:

\ "- guillemet (")

\ - barre oblique inverse unique()

\ a - bell/alerte (émet une tonalité)

\ b - backspace (supprime le caractère précédent, les changements curseur d'une position)

\ r - retour chariot (déplace le curseur au début de la ligne)

\ n - saut de ligne (déplace le curseur à la ligne suivante)

\ s - espace()

\ t - onglet()

+0

Ou en d'autres termes avec des guillemets simples (''\ n'') jus signifie backslash n, mais entre guillemets doubles (' "\ n" ') est un caractère d'échappement remplacé par un saut de ligne. –

+0

je vous remercie beaucoup! :-) – gin85