2011-12-28 3 views
2

C'est quelque chose que j'ai essayé de comprendre pendant un moment, mais je n'arrive pas à le comprendre.Comment mettre sous forme conditionnelle les chaînes de caractères dans Ruby?

Disons que j'ai ces quatre éléments:

  • name = "Mark"
  • location = ""
  • time = Time.now
  • text - "foo"

Et si je str#% pour la mise en forme, comme ceci: "%s was at the location \"%s\" around %s and said %s" % [name,location,time.to_s,text], comment pourrais-je éviter le problème des espaces vides et des mots orphelins? (Par exemple, "Mark était à l'emplacement" "vers 2011-12-28T020500Z-0400 et dit foo")

Y a-t-il d'autres techniques que je pourrais utiliser?

Répondre

3

Juste construire la chaîne au coup par coup et assembler les résultats. Vous pouvez facilement nettoyer les éléments suivants si vous avez accès à .blank? (Je pense qu'il est vide?)

parts = [] 
parts << name if name && !name.empty? 
parts << "was" if name && !name.empty? && location && !location.empty? 
parts << %{at location "#{location}"} if location && !location.empty? 
parts << "around #{time}" 
parts << "and" if location && !location.empty? && text && !text.emtpy? 
parts << "said #{text}" if text && !text.empty? 
parts.join(" ") 
+0

Oui, ce serait vide. J'ai installé le support actif donc je peux simplement mettre 'require 'active_support/core_ext/object/blank''. – Mark

+0

Et c'est ce que j'ai pensé, aussi. Faire quelque chose comme 'parts <<" et "if! Location.blank?" Fonctionnerait bien. – Mark

Questions connexes