Ruby Language Cordes multilignes


Exemple

Le moyen le plus simple de créer une chaîne multiligne consiste à utiliser plusieurs lignes entre guillemets:

address = "Four score and seven years ago our fathers brought forth on this
continent, a new nation, conceived in Liberty, and dedicated to the
proposition that all men are created equal."

Le principal problème de cette technique est que si la chaîne contient une citation, elle va casser la syntaxe de la chaîne. Pour contourner le problème, vous pouvez utiliser un heredoc à la place:

puts <<-RAVEN
  Once upon a midnight dreary, while I pondered, weak and weary, 
  Over many a quaint and curious volume of forgotten lore— 
      While I nodded, nearly napping, suddenly there came a tapping, 
  As of some one gently rapping, rapping at my chamber door. 
  "'Tis some visitor," I muttered, "tapping at my chamber door— 
              Only this and nothing more." 
  RAVEN

Ruby prend en charge les documents de style shell avec <<EOT , mais le texte de fin doit démarrer la ligne. Cela gâche l'indentation du code, il n'y a donc pas beaucoup de raisons d'utiliser ce style. Malheureusement, la chaîne aura des indentations en fonction de la façon dont le code lui-même est en retrait.

Ruby 2.3 résout le problème en introduisant <<~ qui supprime les espaces de début excédentaires:

2.3
def build_email(address)
  return (<<~EMAIL)
    TO: #{address}

    To Whom It May Concern:

    Please stop playing the bagpipes at sunrise!
                     
    Regards,
    Your neighbor               
  EMAIL
end

Les chaînes de pourcentage fonctionnent également pour créer des chaînes multilignes:

%q(
HAMLET        Do you see yonder cloud that's almost in shape of a camel?
POLONIUS        By the mass, and 'tis like a camel, indeed.
HAMLET        Methinks it is like a weasel.
POLONIUS        It is backed like a weasel.
HAMLET        Or like a whale?
POLONIUS        Very like a whale
)

Il existe plusieurs moyens d'éviter les séquences d'interpolation et d'échappement:

  • Guillemet simple au lieu de guillemet double: '\n is a carriage return.'

  • Minuscule q dans une chaîne de pourcentage: %q[#{not-a-variable}]

  • Citation unique de la chaîne de terminal dans un heredoc:

    <<-'CODE'
       puts 'Hello world!'
    CODE