Руби работает со строками также, как и с числовыми данными. Строки могут быть заключены как в двойные кавычки, так и в одиночные.
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.