Pergunta

Se eu adicionar uma barra invertida + espaço para o início de cordas duplas e simples cotados, eu obter resultados diferentes:

"\ text"
'\ text' 

Na saída para a cadeia entre aspas dupla vejo apenas um espaço.
Na saída para o single string vejo barra invertida + espaço.

O que está acontecendo lá? É isso porque '\ ' é interpretado como um caractere especial na cadeia de aspas duplas, mas na única cadeia entre aspas os caracteres são preservados como é?

Se eu mudar as cordas para isso, eu vejo a mesma saída, ou seja, uma única barra seguido por um espaço e, em seguida, o texto:

"\\ text"
'\\ text' 

Em ambos os casos, a barra invertida é escapado. Estou confuso por que eles funcionam da mesma maneira nesta situação.

Existe alguma regra que ajudaria a explicar a diferença fundamental entre a forma como único cordas cotados e cordas duplas citadas lidar com barras invertidas em Ruby?

Foi útil?

Solução

Eu encaminhá-lo para " programação Ruby / Cordas " para uma visão muito concisa mas abrangente das diferenças.

A partir da referência:

puts "Betty's pie shop"

puts 'Betty\'s pie shop'

Porque "Betty" contém um apóstrofo, que é o mesmo personagem como a única citação, na segunda linha, precisamos usar uma barra invertida para escapar o apóstrofo para que o Ruby entende que o apóstrofo é na cadeia literal em vez de marcação o fim do literal string. A barra invertida seguida pela única citação é chamado de uma seqüência de escape.

Outras dicas

cordas duas vezes citados suportar a gama completa de sequências de escape, como se mostra abaixo:

  • \a Sino / alert (0x07)
  • \b Backspace (0x08)
  • \e Escape (0x1b)
  • \f Formford (0x0c)
  • \n nova linha (0x0a)
  • \r Return (0x0d)
  • \s Space (0x20)
  • \t Tab (0x09)
  • \v guia Vertical (0x0b)

Para strings de aspas simples, duas barras invertidas consecutivas são substituídas por uma única barra invertida, e uma barra invertida seguida por uma aspa simples se torna uma aspa simples:

'escape using "\\"' -> escape using "\"
'That\'s right'     -> That's right

Rubi única interpreta sequências de escape em strings de aspas duplas. Em uma única string, única \\ (barra invertida barra invertida) e \' (aspas barra invertida) são tomados como caracteres especiais. Você deve usar cordas duplas citadas apenas quando você precisar de mais interpretação. Caso contrário, aspas simples fornecer um aumento de desempenho.

Quando você mencionou, incluindo o nome de uma variável, Ruby nunca faz isso. Apenas o nome da variável é tratada como mais do literal string. Para incluir o valor de uma variável (ou qualquer expressão) colocar a expressão no assim:

"#{variable}"

Note que isto só funciona em cadeias entre aspas duplas. Para adicionar uma variável para um único citado, você precisa fazer o seguinte:

'The value of X is: '+X

Se precisar de formatação sério, olhar para a versão de Ruby de sprintf e printf. Eles são praticamente wrappers para as funções C, e são muito poderosos, mas um pouco complicado de usar.

Esta não é uma resposta completa (desde a simples pergunta já foi respondida), mas sim que é informação suplementar.

citando fazer você favor?

Não use aspas duplas se você tem que escapar deles. E não cair em "single vs aspas duplas" armadilha. Ruby tem excelente suporte para arbitrária delimitadores para strings literais:

http://rors.org/2008/10/26 / Não-escape-in-cordas

Tomei esse conselho e nunca olhou para trás!

É isto porque o '\' é interpretado como um caractere especial no a string de aspas duplas, mas no única cadeia entre aspas os caracteres são preservados como é?

Sim. Single-citado cordas são tratados como literais; strings delimitadas por aspas são interpolados. Este é o mesmo em outro Rubi-como línguas, e não mudou em 1.9.

Você pode fazer <%= f.label :nom_entreprise, "Nom de l'entreprise" %>

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top