J'ai récemment découvert que la méthode String # split renvoie un tableau à un élément contenant la chaîne d'origine si aucune correspondance n'est trouvée:
if "azerty keyboard".match(/\n/) ...# split here end
Que serait un solution pour ne pas diviser s'il n'y a pas de correspondance trouvée? Utilisez simplement:
"azerty keyboard".split(/\n/)
=> ["azerty keyboard"]
"azerty keyboard".split(',')
=> ["azerty keyboard"]
ou il existe un meilleur moyen?
3 Réponses :
De toute évidence, vous ne l'exécuteriez pas si vous savez ce que la chaîne contient déjà mais supposez que vous avez un objet chaîne:
string = "azerty keyboard"
split_string = string.split(/\n/) if string.include?("\n")
=>nil
Puisque nous jouons avec Ruby, vous pouvez ouvrir la classe String et créer une nouvelle fonction qui fonctionne comme vous le souhaitez:
"azerty keyboard".split_if(/\n/)
=> "azerty keyboard"
"azerty keyboard".split_if(' ')
=> ["azerty", "keyboard"]
Ce qui puis retournez:
class String
def split_if(matches)
match(matches) ? split(matches) : self
end
end
Gardez à l'esprit que ce n'est pas parce que nous pouvons que nous devrions que nous devrions toujours le faire. Certaines personnes pensent que l'ouverture de cours est un grand non-non. Alors devriez-vous faire cela? Cela dépend de vous, de votre équipe et des besoins de votre application.
Vous pouvez également donner un bloc à match au lieu d'utiliser l'instruction if :
str = 'azerty keyboard'
str.match(/\n/) {|m| str.split(m[0])} || str
Ou
"azerty" .include? ("\ N")À quoi sert un conditionnel avant le fait lorsque la taille du tableau résultant vous indique ce résultat et n'entraîne aucune surcharge substantielle.