Est-ce que Ruby a une méthode intégrée string.startswith («abc»)?

200

Ruby a-t-il une some_string.starts_with("abc")méthode intégrée?

Blankman
la source
Question connexe: stackoverflow.com/questions/4130364/…
Andrew Grimm
7
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?

Jörg W Mittag
la source
9
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?
Abdo
3
@anthropomorphic github.com/rails/rails/blob/… ; c'est un alias pour String # start_with?
Abdo
10
@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:

if SomeString.match(/^abc/) 
   # SomeString starts with abc

^ signifie "début de chaîne" dans les expressions régulières

Alex
la source
J'ai pris la combinaison sujet + bods pour signifier "Ruby n'a pas de méthode start_with. Est-ce que rails?".
sepp2k
@ sepp2k, mais il s'agit ?du titre de la question)
Nakilon
1
La chaîne a start_with? depuis ruby ​​1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag
4
@steenslag - ruby ​​1.8.7 a également start_with? - documentation et notes de version 1.8.7
Hamish Downer
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:

"foobar".index("foo") == 0  # => true
Lars Haugseth
la source
9
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.

irb> ("abc" =~ %r"abc") == 0
=> true
irb> ("aabc" =~ %r"abc") == 0
=> false
Nakilon
la source
Veuillez utiliser à la //place de %rchaque fois que possible.
Cyoce