В качестве примечания: если вы работаете в Rails, вы можете просто сделать'Smith'.first
Walking Wiki
Ruby 1.9+ имеет"Smith".chr #=> "S"
Тайлер Джеймс Янг
Ответы:
128
Вы можете использовать открытые классы Ruby, чтобы сделать ваш код более читабельным. Например, это:
classStringdef initialself[0,1]endend
позволит вам использовать initialметод для любой строки. Итак, если у вас есть следующие переменные:
last_name ="Smith"
first_name ="John"
Тогда вы можете получить инициалы очень четко и легко:
puts first_name.initial # prints J
puts last_name.initial # prints S
Другой метод, упомянутый здесь, не работает в Ruby 1.8 (не то чтобы вы все равно должны были использовать 1.8! - но когда этот ответ был опубликован, он все еще был довольно распространенным):
puts 'Smith'[0]# prints 83
Конечно, если вы не делаете это на регулярной основе, тогда определение метода может быть излишним, и вы можете просто сделать это напрямую:
обратите внимание, что это работает только в ruby19. в ruby18 "Smith"[0]вернет целое значение символа "S". Обе версии подчиняются "Smith"[0,1] == "S".
rampion
@rampion: Конечно, но в вопросе нет указания на то, что OP не использует самую последнюю версию, так зачем усложнять вещи?
Jörg W Mittag
4
Ruby 1.8 не является наследием! Линия Ruby 1.8 все еще поддерживается, и, скорее всего, будет выпущена версия 1.8.8. Более того, ни JRuby, ни Rubinius пока не поддерживают 1.9. Я готов поспорить на 5 долларов, что сегодня пользователей 1,8 гораздо больше, чем 1,9.
Марк-Андре Лафортюн
3
@ Jörg: Ответ "Smith"[0,1]работает на 1.8 (при условии, что ASCII). Не уверен, почему вы так много думаете о запросившем, а также обо всех, кто хотел бы узнать из этого вопроса. Например, Mac OS X поставляется в комплекте с Ruby 1.8, поэтому для этих пользователей установка не требуется.
Marc-André Lafortune,
3
Как бы вы получили начальную букву имени «Ангстрём» (в UTF-8), чтобы оно работало должным образом в Ruby 1.8.x и 1.9.x? Ни один из предложенных методов не будет работать в 1.8.x.
обратите внимание, что это работает только в ruby19. в ruby18 "Smith"[0]вернет целое значение символа "S". Обе версии подчиняются "Smith"[0,1] == "S".
rampion
1
@rampion: действительно. Я бы добавил, что "Smith"[0] == ?Sэто верно как для Ruby 1.8, так и для 1.9
Marc-André Lafortune
2
Из-за раздражающего выбора дизайна в Ruby до 1.9 - some_string[0]возвращает символьный код первого символа - самый переносимый способ записать это some_string[0,1], который говорит ему получить подстроку с индексом 0 длиной в 1 символ.
str [0,1] не работает одинаково в 1.8 и 1.9, так как в первом он возвращает первый байт, а во втором - первый символ .
Ларс Хаугсет
1
На самом деле это не разница в том, как работает индексация, как в поддержке многобайтовых языков в 1.9. Оба они предназначены для возврата первого символа, но 1.8 имеет более наивное представление о том, что такое «персонаж».
Ни один из этих методов не будет работать с этим .AFTER name. И последний вариант бессмысленен, даже если вы удалите его ., потому что он использует два разных метода для одного [0]и того же - иchr() .
'Smith'.first
"Smith".chr #=> "S"
Ответы:
Вы можете использовать открытые классы Ruby, чтобы сделать ваш код более читабельным. Например, это:
позволит вам использовать
initial
метод для любой строки. Итак, если у вас есть следующие переменные:Тогда вы можете получить инициалы очень четко и легко:
Другой метод, упомянутый здесь, не работает в Ruby 1.8 (не то чтобы вы все равно должны были использовать 1.8! - но когда этот ответ был опубликован, он все еще был довольно распространенным):
Конечно, если вы не делаете это на регулярной основе, тогда определение метода может быть излишним, и вы можете просто сделать это напрямую:
источник
Если вы используете последнюю версию Ruby (1.9.0 или новее), следующее должно работать:
Если вы используете 1.9.0+ или 1.8.7, должно работать следующее:
Если вы используете версию старше 1.8.7, это должно работать:
Обратите внимание , что
'Smith'[0,1]
это не работает на 1.8, это не даст вам первый символ, это даст вам только первый байт .источник
"Smith"[0]
вернет целое значение символа "S". Обе версии подчиняются"Smith"[0,1] == "S"
."Smith"[0,1]
работает на 1.8 (при условии, что ASCII). Не уверен, почему вы так много думаете о запросившем, а также обо всех, кто хотел бы узнать из этого вопроса. Например, Mac OS X поставляется в комплекте с Ruby 1.8, поэтому для этих пользователей установка не требуется.работает как в Ruby 1.8, так и в Ruby 1.9.
источник
Для полноты картины, поскольку Ruby 1.9 String # chr возвращает первый символ строки. Он по-прежнему доступен в версиях 2.0 и 2.1.
http://ruby-doc.org/core-1.9.3/String.html#method-i-chr
источник
В МРТ 1.8.7 или выше:
источник
В рельсах
источник
Попробуй это:
ИЛИ
источник
источник
"Smith"[0]
вернет целое значение символа "S". Обе версии подчиняются"Smith"[0,1] == "S"
."Smith"[0] == ?S
это верно как для Ruby 1.8, так и для 1.9Из-за раздражающего выбора дизайна в Ruby до 1.9 -
some_string[0]
возвращает символьный код первого символа - самый переносимый способ записать этоsome_string[0,1]
, который говорит ему получить подстроку с индексом 0 длиной в 1 символ.источник
Еще один вариант, о котором еще не упоминалось:
источник
Вы также можете использовать
truncate
или для дополнительного форматирования:
источник
Подойдет любой из этих методов:
источник
.
AFTERname
. И последний вариант бессмысленен, даже если вы удалите его.
, потому что он использует два разных метода для одного[0]
и того же - иchr()
.