Ruby ha un metodo string.startswith ("abc") incorporato?


Risposte:


339

Si chiama String#start_with?, non String#startswith: In Ruby, i nomi dei metodi booleani-ish terminano con ?e le parole nomi dei metodi sono separati con una _. Non sono sicuro di dove sia sandato, personalmente, preferirei String#starts_with?al realeString#start_with?


9
Matz ha detto che preferisce senza la s in quanto sembra in seconda persona singolare o terza persona plurale.
Andrew Grimm,

5
String # start_with? è stato introdotto in ruby ​​1.8.7 e 1.9.0 - per le versioni precedenti potresti voler usare una delle versioni regex o index menzionate in altre risposte.
Hamish Downer,

3
in Rails puoi usare String # start_with?
Abdo,

3
@anthropomorphic github.com/rails/rails/blob/… ; è un alias per String # start_with?
Abdo,

10
@AndrewGrimm L'unico problema è che "una stringa" è in terza persona singolare! (Ergo, 's' non avrebbe dovuto essere lasciato cadere).
user456584

41

Il titolo della domanda e il corpo della domanda sono diversi. Ruby non ha start_with? metodo. Rails , che è un rubino quadro , però, lo fa , come Stati sepp2k. Vedi il suo commento sulla sua risposta per il link alla documentazione per esso.

Puoi sempre usare un'espressione regolare però:

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

^ significa "inizio della stringa" nelle espressioni regolari


Ho preso la combinazione soggetto + bods per dire "Ruby non ha un metodo start_with. Rails?".
sepp2k,

@ sepp2k, ma è ?in questione il titolo)
Nakilon

1
La stringa ha start_with? da ruby ​​1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag

4
@steenslag - ruby ​​1.8.7 ha anche start_with? - documentazione e note di rilascio 1.8.7
Hamish Downer

fai attenzione quando costruisci regex con valori letterali a stringa: ricorda di sfuggire a qualsiasi carattere speciale. c'è una funzione per quella fi che i letterali delle stringhe possono essere imprevedibili
Radu Simionescu,

17

Se questo è per un progetto non Rails, utilizzerei String#index:

"foobar".index("foo") == 0  # => true

9
Ciò, tuttavia, richiederebbe maggiori prestazioni, in quanto un start_with?metodo può semplicemente confermare che l'inizio della stringa corrisponde alla stringa specificata, elaborando così al massimo n caratteri in cui n è la lunghezza della stringa specificata, mentre indexdovrà cercare l'intera stringa di base. In caso di errore, starts_with?richiederà un accesso (per stringa) e un confronto, mentre indexpercorrerà quasi l'intera lunghezza della stringa di base.
OldPeculier,

5

È possibile utilizzare String =~ Regex. Restituisce la posizione della corrispondenza regex completa nella stringa.

irb> ("abc" =~ %r"abc") == 0
=> true
irb> ("aabc" =~ %r"abc") == 0
=> false

Si prega di utilizzare //anziché %rquando possibile.
Cyoce,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.