Руби работает со строками также, как и с числовыми данными. Строки могут быть заключены как в двойные кавычки, так и в одиночные.
- ruby> "abc"
- "abc"
- ruby> 'abc'
- "abc"
Двойные и одиночные кавычки имеют различный эффект в некоторых случаях. Строки, заключённые в двойные кавычки интерпретируют escape последовательности, помеченные обратным слэшем, и для встраивания выражений используется последовательность #{} . Строки, заключённые в одиночные кавычки не выполняют интерпретирования; что вы можете наблюдать в следующих примерах:
- ruby> print "a\nb\nc","\n"
- a
- b
- c
- nil
- ruby> print 'a\nb\n',"\n"
- a\nb\nc
- nil
- ruby> "\n"
- "\n"
- ruby> '\n'
- "\\n"
- ruby> "\001"
- "\001"
- ruby> '\001'
- "\\001"
- ruby> "abcd #{5*3} efg"
- "abcd 15 efg"
- ruby> var = " abc "
- " abc "
- ruby> "1234#{var}5678"
- "1234 abc 5678"
Строки в Ruby обрабатываются умнее и более интуитивно, чем в Си. Например, вы можете склеить строки используя + , а также повторить строку много раз, используя знак * .
- ruby> "foo" + "bar"
- "foobar"
- ruby> "foo" * 2
- "foofoo"
Склеивание строк является более неуклюжим в Си, из-за того, что требуется явное управление памятью.
- char *s = malloc(strlen(s1)+strlen(s2)+1);
- strcpy(s, s1);
- strcat(s, s2);
- /* ... */
- free(s);
Но используя Ruby, мы не рассматриваем пространство, занимаемое строкой. Мы свободны от всего этого управления памятью.
Ниже несколько вещей, которые мы можем сделать со строками:
Склеивание (Конкатенация):
- ruby> word = "fo" + "o"
- "foo"
Повторение:
- ruby> word = word * 2
- "foofoo"
Извлечение символов (Заметьте, что символы являются целыми типами в Ruby):
- ruby> word[0]
- 102 # 102 is ASCII code of `f'
- ruby> word[-1]
- 111 # 111 is ASCII code of `o'
(Отрицательный знак означает смещение с конца строки, а не с начала)
Извлечение подстрок:
- ruby> herb = "parsley"
- "parsley"
- ruby> herb[0,1]
- "p"
- ruby> herb[-2,2]
- "ey"
- ruby> herb[0..3]
- "pars"
- ruby> herb[-5..-2]
- "rsle"
Сравнение строк:
- ruby> "foo" == "foo"
- true
- ruby> "foo" == "bar"
- false
Примечание: В Ruby 1.0, результат сравнения выводится в верхнем регистре, например TRUE .
А сейчас давайте воспользуемся некоторыми этими функциями. Это будет головоломка, отгадай слово, хотя головоломка для следующего кода и громко сказано.
- # save this as guess.rb
- words = ['foobar', 'baz', 'quux']
- secret = words[rand(3)]
- print "guess? "
- while guess = STDIN.gets
- guess.chop!
- if guess == secret
- print "You win!\n"
- break
- else
- print "Sorry, you lose.\n"
- end
- print "guess? "
- end
- print "The word was ", secret, ".\n"
На данный момент, не беспокойтесь слишком о содержимом кода и его деталях. Просто запустите программу и посмотрите на результат её работы.
- % ruby guess.rb
- guess? foobar
- Sorry, you lose.
- guess? quux
- Sorry, you lose.
- guess? ^D
- The word was baz.