Есть ли в Ruby встроенный метод string.startswith («abc»)?

200

Есть ли в Ruby some_string.starts_with("abc")метод, который встроен?

Бланкмэн
источник
Связанный вопрос: stackoverflow.com/questions/4130364/…
Эндрю Гримм
7
Кстати, вы спрашиваете о Ruby или о Rails?
Эндрю Гримм

Ответы:

339

Это называется String#start_with?, а не String#startswith: в Ruby имена методов логического вывода заканчиваются на, ?а слова в именах методов разделяются знаком _. Не уверен, куда sпошел, лично я бы предпочел String#starts_with?реальныйString#start_with?

Йорг Миттаг
источник
9
Мац сказал, что он предпочитает без s, так как это выглядит как второе лицо единственного числа или третьего лица множественного числа.
Эндрю Гримм
5
Строка # start_with? был введен в ruby ​​1.8.7 и 1.9.0 - для более старых версий вы можете использовать одну из версий регулярного выражения или индекса, упомянутых в других ответах.
Хэмиш Даунер
3
в Rails вы можете использовать String # start_with?
Абдо
3
@anthropomorphic github.com/rails/rails/blob/… ; это псевдоним для String # start_with?
Абдо
10
@AndrewGrimm Единственная проблема в том, что «строка» - это третье лицо единственного числа! (Ergo, 's' не должен был быть отброшен).
user456584
41

Ваше название вопроса и ваше тело вопроса отличаются. Рубин не имеет стартов с? метод. Однако Rails , который является фреймворком Ruby , делает , как утверждает sepp2k. Смотрите его комментарий к его ответу для ссылки на документацию для него.

Вы всегда можете использовать регулярное выражение, хотя:

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

^ означает «начало строки» в регулярных выражениях

Alex
источник
Я взял комбинацию «субъект + тело», чтобы обозначить: «У Руби нет метода start_with. Есть рельсы?».
2010 г.
@ sepp2k, но это ?в названии вопроса)
Nakilon
1
Строка имеет start_with? начиная с ruby ​​1.9 ( eigenclass.org/hiki/Changes+in+Ruby+1.9#l124 )
steenslag
4
@steenslag - ruby ​​1.8.7 также имеет start_with? - документация и примечания к выпуску 1.8.7
Хэмиш Даунер
будьте осторожны при построении регулярных выражений из строковых литералов - не забывайте избегать специальных символов. есть функция для того, чтобы строковые литералы могли быть непредсказуемыми
Раду
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
Nakilon
источник
Пожалуйста, используйте //вместо того, чтобы по %rвозможности.
Cyoce