Ruby deals with strings as well as numerical data. A string may be double-quoted ("...") or single-quoted ('...').
Double- and single-quoting have different effects in some
cases. A double-quoted string allows character escapes by a
leading backslash, and the evaluation of embedded expressions using
#{}. A single-quoted string does not do this
interpreting; what you see is what you get. Examples:
puts "a\nb\nc" |
Output:
a
b
c
puts 'a\nb\nc' |
Output:
a\nb\nc
"\n"
'\n'
"\001"
'\001'
"abcd #{5*3} efg"
var = " abc "
"1234#{var}5678" |
Output:
Ruby's string handling is smarter and more intuitive than C's. For
instance, you can concatenate strings with +, and repeat a
string many times with *:
puts "foo" + "bar" |
puts "foo" * 2 |
Concatenating strings is much more awkward in C because of the need for explicit memory management:
#include <string.h>
#include <stdio.h>
#include <malloc.h>
int main () {
char s1[] = "abc";
char s2[] = "def";
char *s = (char *)malloc(strlen(s1)+strlen(s2)+1);
strcpy(s, s1);
strcat(s, s2);
printf(s);
free(s);
} |
Using ruby, we do not have to consider the space occupied by a string. We are free from all memory management.
Here are some things you can do with strings.
Concatenation:
Repetition:
word = "fo" + "o" word = word * 2 puts word |
Extracting characters (note that characters are integers in ruby):
word = "fo" + "o" word = word * 2 puts word[0] puts word[-1] |
(Negative indices mean offsets from the end of a string, rather than the beginning.)
Extracting substrings:
herb = "parsley" puts herb[0,1] puts herb[-2,2] puts herb[0..3] puts herb[-5..-2] |
Output:
Testing for equality:
puts "foo" == "foo" puts "foo" == "bar" |
Output
Note: In ruby 1.0, results of the above are reported in uppercase,
e.g. TRUE.
Now, let's put some of these features to use. This puzzle is
"guess the word," but perhaps the word "puzzle" is too dignified
for what is to follow ;-).
For now, don't worry too much about the details of this code. Here is what a run of the puzzle program looks like.
(I should have done a bit better, considering the 1/3 probability of success.)
Let's try a modified version of this program with Zamples. Run it several times and notice that sometimes the word passed as a command line parameter matches and most of the time it does not.
guess = ARGV[0] words = ['foobar', 'baz', 'quux'] secret = words[rand(3)] if guess == secret puts "You win!" else puts "Sorry, you lose." end print "The word was ", secret, ".\n" puts "Please click the Run it! button again." |


