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