A Few Facets: An Exploratory Introduction To Ruby
A Few Facets: An Exploratory Introduction To Ruby
松本行弘
MASUMOTO Yukihiro, “matz”
Array Hash
Wednesday, March 11, 2009 6
Variable Assignment & Scope
(main)
$global_variables
(class/module)
Constants or CONSTANTS, ::
(instance)
@@class_variables
@instance_variables
(method)
normal_variables
age = 13 age += 1
Assignment Reassignment
Wednesday, March 11, 2009 7
Control Structures
car.fill_up! if car.needs_gas?
car.drive 40 unless car.needs_gas?
If Unless
case car.model
while car.can_drive? 40
when 'Ford'
car.drive 40
# ...
end
when 'Porsche'
# ...
loop do
else
# Something else # do something forever
end end
Case Loops
Wednesday, March 11, 2009 8
Blocks
Iteration Transactions
Instantiation
Wednesday, March 11, 2009 11
Enumerable
each map/collect
class Car
end # ...
end
"name".methods
# ["%", "select", "[]=", "inspect", "<<", "each_byte",
"method", "clone", "gsub", "casecmp", "public_methods",
"to_str", "partition", "tr_s", "empty?", ... obj.methods.select do |n|
n =~ /[a-z]$/
end.each do |meth|
obj.instance_eval <<-CODE
alias :original_#{meth} :#{meth}
def #{meth}(*args, &block)
puts "Doing #{meth}..."
Listing Methods result = original_#{meth}(*args, &block)
puts "Done doing #{meth}, result: \#{result}"
result
end
name = 'John' CODE
obj.instance_eval <<CODE end
def yell
puts "My name is #{name}!!!"
end
CODE
obj.yell
# My name is John!!!
Dynamic Evaluation
Wednesday, March 11, 2009 14
Questions?