Чи у Ruby вбудований метод string.startswith ("abc")?


Відповіді:


339

Це називається String#start_with?, не String#startswith: У Ruby назви методів boolean-ish закінчуються, ?а слова в назвах методів відокремлюються символом _. Не впевнений, куди sпішов, особисто я вважаю String#starts_with?за краще фактичнеString#start_with?


9
Матц сказав, що віддає перевагу без s, оскільки це виглядає як множина другої особи або множини третьої особи.
Ендрю Грімм

5
Рядок # start_with? було введено в рубінах 1.8.7 та 1.9.0 - для старих версій ви можете використовувати одну з версій регексу або індексу, згаданих в інших відповідях.
Хаміш Даунер

3
в Rails ви можете використовувати рядок # start_with?
Абдо

3
@anthropomorphic github.com/rails/rails/blob/… ; це псевдонім для String # start_with?
Абдо

10
@AndrewGrimm Єдиною проблемою є те, що "рядок" є третьою особою однини! (Ergo, 's' не слід було скидати).
користувач456584

41

Назва вашого запитання та орган вашого запитання відрізняються. У Рубі немає старту_з? метод. Rails , що є рамкою Ruby , однак робить , як заявляє sepp2k. Дивіться його коментар до його відповіді за посиланням на документацію на нього.

Ви завжди можете використовувати регулярний вираз:

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

^ означає "початок рядка" у регулярних виразах


Я взяв комбінацію предмета + bods, щоб означати, що "Рубі не має методу start_with. Чи є рейли?".
sepp2k

@ sepp2k, але це ?питання під назвою)
Накілон

Рядок має start_with? з моменту рубіну 1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag

4
@steenslag - ruby ​​1.8.7 також має start_with? - документація та 1.8.7 нотатки до випуску
Хаміш Даунер

обережно, будуючи реджекси з рядкових літералів - не забудьте уникнути будь-яких спеціальних символів. є функція, для якої фіральні рядки можуть бути непередбачуваними
Radu Simionescu

17

Якщо це проект, який не належить до Rails, я б використав String#index:

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

9
Це, однак, було би більш ефективним, оскільки start_with?метод може просто підтвердити, що початок рядка відповідає заданій рядку, таким чином обробляючи не більше n символів, де n - довжина заданої рядки - тоді як indexдоведеться шукати весь базовий рядок. У випадку відмови starts_with?буде взято один доступ (за рядок) та порівняння, тоді як indexбуде проходити майже по всій довжині базової рядки.
OldPeculier

5

Можна використовувати String =~ Regex. Він повертає позицію повного збігу регулярних виразів у рядку

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

Будь ласка, використовуйте //замість того, %rколи це можливо.
Cyoce
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.