Apakah Ruby memiliki metode string.startswith ("abc")?

200

Apakah Ruby memiliki some_string.starts_with("abc")metode yang terintegrasi?

Blankman
sumber
Pertanyaan terkait: stackoverflow.com/questions/4130364/…
Andrew Grimm
7
Kebetulan, apakah Anda bertanya tentang Ruby, atau tentang Rails?
Andrew Grimm

Jawaban:

339

Disebut String#start_with?, bukan String#startswith: Di Ruby, nama metode boolean-ish diakhiri dengan ?dan kata-kata dalam nama metode dipisahkan dengan a _. Tidak yakin ke mana sperginya, secara pribadi, saya lebih suka String#starts_with?daripada yang sebenarnyaString#start_with?

Jörg W Mittag
sumber
9
Matz mengatakan dia lebih suka tanpa s karena kemudian terlihat seperti orang kedua tunggal atau orang ketiga jamak.
Andrew Grimm
5
String # start_with? diperkenalkan di ruby ​​1.8.7 dan 1.9.0 - untuk versi yang lebih lama Anda mungkin ingin menggunakan salah satu versi regex atau indeks yang disebutkan dalam jawaban lain.
Hamish Downer
3
di Rails, Anda dapat menggunakan String # begin_with?
Abdo
3
@anthropomorphic github.com/rails/rails/blob/… ; itu alias untuk String # start_with?
Abdo
10
@AndrewGrimm Satu-satunya masalah adalah "string" adalah orang ketiga tunggal! (Ergo, 's' seharusnya tidak dijatuhkan).
user456584
41

Judul pertanyaan dan badan pertanyaan Anda berbeda. Ruby tidak memiliki begin_with? metode. Rails , yang merupakan kerangka kerja Ruby , tidak , sebagai status sepp2k. Lihat komentarnya pada jawabannya untuk tautan ke dokumentasi untuk itu.

Anda selalu dapat menggunakan ekspresi reguler:

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

^ berarti "permulaan string" dalam ekspresi reguler

Alex
sumber
Saya mengambil kombinasi subjek + bods yang berarti "Ruby tidak memiliki metode begin_with. Apakah rails?".
sepp2k
@ sepp2k, tetapi ?dalam judul pertanyaan)
Nakilon
1
String memiliki start_with? sejak ruby ​​1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag
4
@steenslag - ruby ​​1.8.7 juga memiliki start_with? - dokumentasi dan catatan rilis 1.8.7
Hamish Downer
hati-hati saat membangun regex dari string literal - jangan lupa untuk menghindari karakter khusus apa pun. ada fungsi untuk itu string literal dapat diprediksi
Radu Simionescu
17

Jika ini untuk proyek non-Rails, saya akan menggunakan String#index:

"foobar".index("foo") == 0  # => true
Lars Haugseth
sumber
9
Akan tetapi, ini akan menjadi lebih intensif-kinerja, dalam suatu start_with?metode hanya dapat mengkonfirmasi bahwa awal string cocok dengan string yang diberikan - dengan demikian memproses paling banyak n karakter di mana n adalah panjang dari string yang diberikan - sedangkan indexharus mencari seluruh string dasar. Dalam kasus kegagalan, starts_with?akan mengambil satu akses (per string) dan perbandingan, sedangkan indexakan berjalan hampir sepanjang string dasar.
OldPeculier
5

Anda bisa menggunakannya String =~ Regex. Ini mengembalikan posisi pertandingan regex penuh dalam string.

irb> ("abc" =~ %r"abc") == 0
=> true
irb> ("aabc" =~ %r"abc") == 0
=> false
Nakilon
sumber
Silakan gunakan //alih-alih %rkapan pun memungkinkan.
Cyoce