Ruby'de yerleşik bir string.startswith (“abc”) yöntemi var mı?


Yanıtlar:


339

Buna String#start_with?değil denir String#startswith: Ruby'de, boolean-ish yöntemlerinin adları ile biter ?ve yöntem adlarındaki kelimeler bir ile ayrılır _. sŞahsen nereye gittiğinden emin değilim String#starts_with?, gerçek olarakString#start_with?


9
Matz, ikinci şahıs tekil veya üçüncü şahıs çoğuluna benzediği için s olmadan tercih ettiğini söyledi.
Andrew Grimm

5
Dize # start_with? yakut 1.8.7 ve 1.9.0'da tanıtıldı - eski sürümler için diğer yanıtlarda belirtilen normal ifade veya dizin sürümlerinden birini kullanmak isteyebilirsiniz.
Hamish Downer

3
Rails, # starts_with?
Abdo

3
@anthropomorphic github.com/rails/rails/blob/… ; # start_with dizesi için bir takma addır?
Abdo

10
@AndrewGrimm Tek dize "bir dize" üçüncü kişi tekil olmasıdır! (Ergo, 's' düşürülmemeliydi).
user456584

41

Soru başlığınız ve soru bedeniniz farklı. Ruby'de start_with yok mu? yöntem. Raylar Ruby olan çerçeve , ancak, yaptığı sepp2k devletler olarak,. Dokümantasyon bağlantısı için verdiği cevap hakkındaki yorumuna bakın.

Yine de her zaman normal bir ifade kullanabilirsiniz:

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

^ normal ifadelerde "dizginin başlangıcı" anlamına gelir


"Ruby'nin bir start_with yöntemi yok. Raylar var mı?"
sepp2k

@ sepp2k, ancak ?soru başlığında)
Nakilon

1
Dize start_with? yakut 1.9'dan beri ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag

4
@steenslag - ruby ​​1.8.7'de start_with var? - belgeler ve 1.8.7 sürüm notları
Hamish Downer

dizgi değişmezlerinden regexes oluştururken dikkatli olun - özel karakterlerden kaçmayı unutmayın. bu fi için bir işlev var dizeleri değişmezleri tahmin edilemez olabilir
Radu Simionescu

17

Bu Rails olmayan bir proje için ise, ben kullanacağım String#index:

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

9
Ancak bu, daha fazla performans yoğun, bu olacağını start_with?yöntemle can basitçe onayla dize başlangıcı verilen dize böylece en fazla işlem eşleştiğini n karakterlerin n uzunluğudur verilen dize oysa indexaramak zorunda kalacak tüm temel dize. Bir başarısızlık durumunda, starts_with?bir erişim (dize başına) ve karşılaştırma alırken index, temel dizenin neredeyse tüm uzunluğu boyunca yürür.
OldPeculier

5

Kullanabilirsiniz String =~ Regex. Dizede tam normal ifade eşleşmesinin konumunu döndürür.

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

Lütfen mümkün olduğunca //yerine kullanın %r.
Cyoce
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.