Evgenii Legotckoi
18 июня 2016 г. 11:49

User Guide #04 - Ruby - Строки

Руби работает со строками также, как и с числовыми данными. Строки могут быть заключены как в двойные кавычки, так и в одиночные.

  1. ruby> "abc"
  2. "abc"
  3. ruby> 'abc'
  4. "abc"

Двойные и одиночные кавычки имеют различный эффект в некоторых случаях. Строки, заключённые в двойные кавычки интерпретируют escape последовательности, помеченные обратным слэшем, и для встраивания выражений используется последовательность #{} . Строки, заключённые в одиночные кавычки не выполняют интерпретирования; что вы можете наблюдать в следующих примерах:

  1. ruby> print "a\nb\nc","\n"
  2. a
  3. b
  4. c
  5. nil
  6. ruby> print 'a\nb\n',"\n"
  7. a\nb\nc
  8. nil
  9. ruby> "\n"
  10. "\n"
  11. ruby> '\n'
  12. "\\n"
  13. ruby> "\001"
  14. "\001"
  15. ruby> '\001'
  16. "\\001"
  17. ruby> "abcd #{5*3} efg"
  18. "abcd 15 efg"
  19. ruby> var = " abc "
  20. " abc "
  21. ruby> "1234#{var}5678"
  22. "1234 abc 5678"

Строки в Ruby обрабатываются умнее и более интуитивно, чем в Си. Например, вы можете склеить строки используя + , а также повторить строку много раз, используя знак * .

  1. ruby> "foo" + "bar"
  2. "foobar"
  3. ruby> "foo" * 2
  4. "foofoo"

Склеивание строк является более неуклюжим в Си, из-за того, что требуется  явное управление памятью.

  1. char *s = malloc(strlen(s1)+strlen(s2)+1);
  2. strcpy(s, s1);
  3. strcat(s, s2);
  4. /* ... */
  5. free(s);

Но используя Ruby, мы не рассматриваем пространство, занимаемое строкой. Мы свободны от всего этого управления памятью.

Ниже несколько вещей, которые мы можем сделать со строками:

Склеивание (Конкатенация):

  1. ruby> word = "fo" + "o"
  2. "foo"

Повторение:

  1. ruby> word = word * 2
  2. "foofoo"

Извлечение символов (Заметьте, что символы являются целыми типами в Ruby):

  1. ruby> word[0]
  2. 102 # 102 is ASCII code of `f'
  3. ruby> word[-1]
  4. 111 # 111 is ASCII code of `o'

(Отрицательный знак означает смещение с конца строки, а не с начала)

Извлечение подстрок:

  1. ruby> herb = "parsley"
  2. "parsley"
  3. ruby> herb[0,1]
  4. "p"
  5. ruby> herb[-2,2]
  6. "ey"
  7. ruby> herb[0..3]
  8. "pars"
  9. ruby> herb[-5..-2]
  10. "rsle"

Сравнение строк:

  1. ruby> "foo" == "foo"
  2. true
  3. ruby> "foo" == "bar"
  4. false

Примечание: В Ruby 1.0, результат сравнения выводится в верхнем регистре, например TRUE .

А сейчас давайте воспользуемся некоторыми этими функциями.  Это будет головоломка, отгадай слово, хотя головоломка для следующего кода и громко сказано.

  1. # save this as guess.rb
  2. words = ['foobar', 'baz', 'quux']
  3. secret = words[rand(3)]
  4.  
  5. print "guess? "
  6. while guess = STDIN.gets
  7. guess.chop!
  8. if guess == secret
  9. print "You win!\n"
  10. break
  11. else
  12. print "Sorry, you lose.\n"
  13. end
  14. print "guess? "
  15. end
  16. print "The word was ", secret, ".\n"

На данный момент, не беспокойтесь слишком о содержимом кода и его деталях. Просто запустите программу и посмотрите на результат её работы.

  1. % ruby guess.rb
  2. guess? foobar
  3. Sorry, you lose.
  4. guess? quux
  5. Sorry, you lose.
  6. guess? ^D
  7. The word was baz.

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь