84 votes

Pourquoi chaîne d'interpolation de travail en Ruby quand il n'y a pas d'accolades?

La bonne façon d'utiliser la chaîne de l'interpolation dans le Rubis est comme suit:

name = "Ned Stark"
puts "Hello there, #{name}" #=> "Hello there, Ned Stark"

C'est la façon que j'ai l'intention de toujours l'utiliser.

Cependant, j'ai remarqué quelque chose de bizarre dans le Rubis de la chaîne d'interpolation. J'ai remarqué que la chaîne d'interpolation fonctionne en Ruby sans les accolades en ce qui concerne les variables d'instance. Par exemple:

@name = "Ned Stark"
puts "Hello there, #@name" #=> "Hello there, Ned Stark"

Et qui tentent la même chose comme un non-variable d'instance ne fonctionne pas.

name = "Ned Stark"
puts "Hello, there, #name" #=> "Hello there, #name"

J'ai essayé avec succès dans les deux 1.9.2 et 1.8.7.

Pourquoi ce travail? Qu'est-ce que l'interprète ici?

98voto

tsherif Points 3992

Selon Le Langage de Programmation Ruby par Flanagan et Matsumoto:

Lorsque l'expression à être interpolées dans le littéral de chaîne est tout simplement une référence à un mondial, de l'instance ou de la variable de classe, puis les accolades peuvent être omis.

Donc, les éléments suivants doivent tous les travaux:

@var = "Hi"
puts "#@var there!"  #=> "Hi there!"

@@var = "Hi"
puts "#@@var there!" #=> "Hi there!"

$var = "Hi"
puts "#$var there!"  #=> "Hi there!"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X