Hat Ruby eine eingebaute Methode string.startswith ("abc")?

200

Hat Ruby eine some_string.starts_with("abc")eingebaute Methode?

Blankman
quelle
Verwandte Frage: stackoverflow.com/questions/4130364/…
Andrew Grimm
7
Fragen Sie übrigens nach Ruby oder nach Rails?
Andrew Grimm

Antworten:

339

Es heißt String#start_with?nicht String#startswith: In Ruby enden die Namen von booleschen Methoden mit ?und die Wörter in Methodennamen werden durch ein getrennt _. sIch bin mir nicht sicher, wohin das ging, ich persönlich würde es String#starts_with?dem tatsächlichen vorziehenString#start_with?

Jörg W Mittag
quelle
9
Matz hat gesagt, er bevorzuge ohne das s, da es dann wie eine zweite Person Singular oder eine dritte Person Plural aussieht.
Andrew Grimm
5
String # start_with? wurde in Ruby 1.8.7 und 1.9.0 eingeführt - für ältere Versionen möchten Sie möglicherweise eine der in anderen Antworten genannten Regex- oder Indexversionen verwenden.
Hamish Downer
3
In Rails können Sie String # start_with?
Abdo
3
@anthropomorphic github.com/rails/rails/blob/… ; Es ist ein Alias ​​für String # start_with?
Abdo
10
@ AndrewGrimm Das einzige Problem ist, dass "eine Zeichenfolge" die dritte Person Singular ist! (Ergo, 's' sollte nicht fallen gelassen worden sein).
user456584
41

Ihr Fragentitel und Ihr Fragetext sind unterschiedlich. Ruby hat keine Starts mit? Methode. Rails , ein Ruby- Framework , tut dies jedoch , wie in sepp2k angegeben. Siehe seinen Kommentar zu seiner Antwort für den Link zur Dokumentation dafür.

Sie können jedoch immer einen regulären Ausdruck verwenden:

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

^ bedeutet "Anfang der Zeichenfolge" in regulären Ausdrücken

Alex
quelle
Ich habe die Kombination aus Betreff und Körper so verstanden, dass "Ruby keine Methode" meets_with "hat. Hat Rails?".
sepp2k
@ sepp2k, aber es ist ?in Frage Titel)
Nakilon
String hat start_with? seit ruby ​​1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag
4
@steenslag - ruby ​​1.8.7 hat auch start_with? - Dokumentation und 1.8.7 Versionshinweise
Hamish Downer
Vorsicht beim Erstellen von Regexen aus String-Literalen - denken Sie daran, keine Sonderzeichen zu verwenden. Es gibt eine Funktion dafür, dass die Zeichenfolgenliterale unvorhersehbar sein können
Radu Simionescu
17

Wenn dies für ein Nicht-Rails-Projekt ist, würde ich verwenden String#index:

"foobar".index("foo") == 0  # => true
Lars Haugseth
quelle
9
Dies wäre jedoch start_with?insofern leistungsintensiver, als eine Methode einfach bestätigen kann, dass der Anfang der Zeichenfolge mit der angegebenen Zeichenfolge übereinstimmt, wodurch höchstens n Zeichen verarbeitet werden, wobei n die Länge der angegebenen Zeichenfolge ist, während indexgesucht werden muss die gesamte Basiszeichenfolge. In einem Fehlerfall starts_with?wird ein Zugriff (pro Zeichenfolge) und ein Vergleich durchgeführt, während indexfast die gesamte Länge der Basiszeichenfolge ausgeführt wird.
OldPeculier
5

Sie können verwenden String =~ Regex. Es gibt die Position der vollständigen Regex-Übereinstimmung in der Zeichenfolge zurück.

irb> ("abc" =~ %r"abc") == 0
=> true
irb> ("aabc" =~ %r"abc") == 0
=> false
Nakilon
quelle
Bitte verwenden Sie //statt %rwann immer möglich.
Cyoce