Pouvez-vous mettre une déclaration conditionnelle dans un documentaire?Pouvez-vous mettre une déclaration conditionnelle dans un here-doc?
IE:
sky = 1
str = <<EOF
The sky is #{if sky == 1 then blue else green end}
EOF
Merci
Pouvez-vous mettre une déclaration conditionnelle dans un documentaire?Pouvez-vous mettre une déclaration conditionnelle dans un here-doc?
IE:
sky = 1
str = <<EOF
The sky is #{if sky == 1 then blue else green end}
EOF
Merci
Oui, vous pouvez. (Avez-vous essayé?) HEREDOCs a déclaré que vous avez agi comme une chaîne entre guillemets. Si vous est arrivé de vouloir l'inverse, vous le feriez guillemet simple votre indicateur heredoc comme ceci:
str = <<EOF
#{ "this is interpolated Ruby code" }
EOF
str = <<'EOF'
#{ This is literal text }
EOF
Le « vert » et « bleu » dans votre exemple sont mauvais, sauf si vous avez des méthodes ou des variables locales avec les noms . Vous avez probablement voulu soit:
str = <<EOF
The sky is #{if sky==1 then 'blue' else 'green' end}
EOF
... ou la version terser:
str = <<EOF
The sky is #{sky==1 ? :blue : :green}
end
Comme toute interpolation de chaîne, le résultat de chaque expression a #to_s
appelé là-dessus. Comme la représentation sous forme de chaîne d'un symbole est le même texte, l'utilisation de symboles en interpolation comme celle-ci permet d'enregistrer un caractère lors de la frappe. Je l'utilise le plus souvent comme:
cats = 13
str = "I have #{cats} cat#{:s if cats!=1}"
Génial, fonctionne parfaitement! Besoin de quelque chose de similaire à "J'ai # {chats} cat # {: s if cats! = 1}". Merci! – Matt
Et si j'ai le: bleu et: vert dans une variable? Dites un tableau couleurs [0], couleurs [1] etc. Comment l'heredoc changera-t-il? –
@VijayDev Son code Ruby standard est entouré de '# {...}'; essayez ce que vous attendez de travailler et de voir. – Phrogz
Vous pouvez le faire, mais il est bon de regarder au-delà de la capacité technique de le faire et de décider s'il est bon pour le code maintenabilité. Je préférerais voir le test conditionnel se produire en dehors du doc-doc, assigner à une variable, puis incorporer la variable dans l'affectation here-doc. Cela peut sembler une différence subtile dans cet exemple mais aide à mieux organiser le code au fur et à mesure qu'un programme se développe, un peu comme si on séparait la logique de l'affichage dans Rails ou autre MVC. –