http://learnrubythehardway.org/book/ex37.html
ten_things = "Apples Oranges Crows Telephone Light Sugar"
puts "Wait there are not 10 things in that list. Let's fix that."
stuff = ten_things.split(' ')
more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn", "Banana", "Girl", "Boy"]
# using math to make sure there's 10 items
while stuff.length != 10
next_one = more_stuff.pop
puts "Adding: #{next_one}"
stuff.push(next_one)
puts "There are #{stuff.length} items now."
end
puts "There we go: #{stuff}"
puts "Let's do some things with stuff."
puts stuff[1]
puts stuff[-1] # whoa! fancy
puts stuff.pop()
puts stuff.join(' ')
puts stuff[3..5].join("#")
Hash(哈希表)是ruby中另外一个常用的容器,其他编程语言也称这种容器为字典(Dictionary)
stuff = {'name' => 'Zed', 'age' => 39, 'height' => 6 * 12 + 2}
stuff['name']
stuff['age']
stuff['city'] = "San Francisco"
stuff['city']
stuff
stuff[1] = "Wow"
stuff[2] = "Neato"
stuff.delete('city')
# create a mapping of state to abbreviation
states = {
'Oregon' => 'OR',
'Florida' => 'FL',
'California' => 'CA',
'New York' => 'NY',
'Michigan' => 'MI'
}
# create a basic set of states and some cities in them
cities = {
'CA' => 'San Francisco',
'MI' => 'Detroit',
'FL' => 'Jacksonville'
}
# add some more cities
cities['NY'] = 'New York'
cities['OR'] = 'Portland'
# puts out some cities
puts '-' * 10
puts "NY State has: #{cities['NY']}"
puts "OR State has: #{cities['OR']}"
# puts some states
puts '-' * 10
puts "Michigan's abbreviation is: #{states['Michigan']}"
puts "Florida's abbreviation is: #{states['Florida']}"
# do it by using the state then cities dict
puts '-' * 10
puts "Michigan has: #{cities[states['Michigan']]}"
puts "Florida has: #{cities[states['Florida']]}"
# puts every state abbreviation
puts '-' * 10
states.each do |state, abbrev|
puts "#{state} is abbreviated #{abbrev}"
end
# puts every city in state
puts '-' * 10
cities.each do |abbrev, city|
puts "#{abbrev} has the city #{city}"
end
# now do both at the same time
puts '-' * 10
states.each do |state, abbrev|
city = cities[abbrev]
puts "#{state} is abbreviated #{abbrev} and has city #{city}"
end
puts '-' * 10
# by default ruby says "nil" when something isn't in there
state = states['Texas']
if !state
puts "Sorry, no Texas."
end
# default values using ||= with the nil result
city = cities['TX']
city ||= 'Does Not Exist'
puts "The city for the state 'TX' is: #{city}"
mystuff = {'apple' => "I AM APPLES!"}
puts mystuff['apple']
# this goes in mystuff.rb
module MyStuff
def MyStuff.apple()
puts "I AM APPLES!"
end
# this is just a variable
TANGERINE = "Living reflection of a dream"
end
MyStuff.apple()
puts MyStuff::TANGERINE
Class可以理解为可实例化(initialize)的Module,实例化后的Class称为Object
class MyStuff
def initialize()
@tangerine = "And now a thousand years between"
end
attr_reader :tangerine
def apple()
puts "I AM CLASSY APPLES!"
end
end
thing = MyStuff.new()
thing.apple()
puts thing.tangerine
What is the difference between a Fish and a Salmon?
What is the difference between Mary and a Salmon?
## Animal is-a object look at the extra credit
class Animal
end
## ??
class Dog < Animal
def initialize(name)
## ??
@name = name
end
end
## ??
class Cat < Animal
def initialize(name)
## ??
@name = name
end
end
## ??
class Person
def initialize(name)
## ??
@name = name
## Person has-a pet of some kind
@pet = nil
end
attr_accessor :pet
end
## ??
class Employee < Person
def initialize(name, salary)
## ?? hmm what is this strange magic?
super(name)
## ??
@salary = salary
end
end
## ??
class Fish
end
## ??
class Salmon < Fish
end
## ??
class Halibut < Fish
end
## rover is-a Dog
rover = Dog.new("Rover")
## ??
satan = Cat.new("Satan")
## ??
mary = Person.new("Mary")
## ??
mary.pet = satan
## ??
frank = Employee.new("Frank", 120000)
## ??
frank.pet = rover
## ??
flipper = Fish.new()
## ??
crouse = Salmon.new()
## ??
harry = Halibut.new()