Soit dit en passant, posez-vous des questions sur Ruby ou sur Rails?
Andrew Grimm
Réponses:
339
Cela s'appelle String#start_with?, pas String#startswith: dans Ruby, les noms des méthodes booléennes se terminent par ?et les mots dans les noms de méthode sont séparés par un _. Je ne sais pas où est sallé, personnellement, je préfère String#starts_with?sur le réelString#start_with?
Matz a dit qu'il préfère sans le s car il ressemble alors à la deuxième personne du singulier ou à la troisième personne du pluriel.
Andrew Grimm
5
Chaîne # start_with? a été introduit dans ruby 1.8.7 et 1.9.0 - pour les versions plus anciennes, vous souhaiterez peut-être utiliser l'une des versions regex ou index mentionnées dans d'autres réponses.
Hamish Downer
3
dans Rails, vous pouvez utiliser String # starts_with?
@AndrewGrimm Le seul problème étant que "une chaîne" est la troisième personne du singulier! (Ergo, 's' n'aurait pas dû être abandonné).
user456584
41
Le titre de votre question et le corps de votre question sont différents. Ruby n'a pas de start_with? méthode. Rails , qui est un Ruby cadre cependant, fait , comme les États sepp2k. Voir son commentaire sur sa réponse pour le lien vers la documentation correspondante.
Vous pouvez toujours utiliser une expression régulière:
ifSomeString.match(/^abc/)# SomeString starts with abc
^ signifie "début de chaîne" dans les expressions régulières
Soyez prudent lorsque vous construisez des expressions rationnelles à partir de littéraux de chaîne - n'oubliez pas d'échapper à tout caractère spécial. il y a une fonction pour ce fi les littéraux de chaînes peuvent être imprévisibles
Radu Simionescu
17
Si c'est pour un projet non-Rails, j'utiliserais String#index:
Ce serait, cependant, plus gourmand en performances, dans la mesure où une start_with?méthode peut simplement confirmer que le début de la chaîne correspond à la chaîne donnée - traitant ainsi au plus n caractères où n est la longueur de la chaîne donnée - alors indexqu'elle devra rechercher la chaîne de base entière. Dans un cas d'échec, starts_with?prendra un accès (par chaîne) et une comparaison, tandis que indexparcourra presque toute la longueur de la chaîne de base.
OldPeculier
5
Vous pouvez utiliser String =~ Regex. Il renvoie la position de la correspondance regex complète dans la chaîne.
Réponses:
Cela s'appelle
String#start_with?
, pasString#startswith
: dans Ruby, les noms des méthodes booléennes se terminent par?
et les mots dans les noms de méthode sont séparés par un_
. Je ne sais pas où ests
allé, personnellement, je préfèreString#starts_with?
sur le réelString#start_with?
la source
Le titre de votre question et le corps de votre question sont différents. Ruby n'a pas de start_with? méthode. Rails , qui est un Ruby cadre cependant, fait , comme les États sepp2k. Voir son commentaire sur sa réponse pour le lien vers la documentation correspondante.
Vous pouvez toujours utiliser une expression régulière:
^
signifie "début de chaîne" dans les expressions régulièresla source
?
du titre de la question)Si c'est pour un projet non-Rails, j'utiliserais
String#index
:la source
start_with?
méthode peut simplement confirmer que le début de la chaîne correspond à la chaîne donnée - traitant ainsi au plus n caractères où n est la longueur de la chaîne donnée - alorsindex
qu'elle devra rechercher la chaîne de base entière. Dans un cas d'échec,starts_with?
prendra un accès (par chaîne) et une comparaison, tandis queindex
parcourra presque toute la longueur de la chaîne de base.Vous pouvez utiliser
String =~ Regex
. Il renvoie la position de la correspondance regex complète dans la chaîne.la source
//
place de%r
chaque fois que possible.