, , Eclipse。
ruby 。
ruby class。 ri20min.rb, 20 。
, , :
if __FILE__ == $0
end
__FILE__ “ ” , 。$0 。 “if __FILE__ == $0” 。 , ; , 。
, , :
#!/usr/bin/env ruby
class MegaGreeter
attr_accessor :names
#
def initialize(names = "World")
@names = names
end
# hi
def say_hi
if @names.nil?
puts "..."
elsif @names.respond_to?("each")
# @names
@names.each do |name|
puts "Hello #{name}!"
end
else
puts "Hello #{@names}!"
end
end
# bye
def say_bye
if @names.nil?
puts "..."
elsif @names.respond_to?("join")
#
puts "Goodbye #{@names.join(", ")}. Come back soon!"
else
puts "Goodbye #{@names}. Come back soon!"
end
end
end
if __FILE__ == $0
mg = MegaGreeter.new
mg.say_hi
mg.say_bye
# "Zeke"
mg.names = "Zeke"
mg.say_hi
mg.say_bye
#
mg.names = ["Albert", "Brenda", "Charles",
"Dave", "Englebert"]
mg.say_hi
mg.say_bye
# nil
mg.names = nil
mg.say_hi
mg.say_bye
end
:
Hello World!
Goodbye World. Come back soon!
Hello Zeke!
Goodbye Zeke. Come back soon!
Hello Albert!
Hello Brenda!
Hello Charles!
Hello Dave!
Hello Englebert!
Goodbye Albert, Brenda, Charles, Dave, Englebert. Come back soon!
...
...
, :
# ruby , # :
Unix-like Shell 。 。
if @names.nil?
。
elsif @names.respond_to?("each")
@names 。 。
each , , 。
@names.each do |name|
puts "Hello #{name}!"
end
each , 。 do end , , lambda 。
| , , 。
java for
elsif @names.respond_to?("join")
#
puts "Goodbye #{@names.join(", ")}. Come back soon!"
else
puts "Goodbye #{@names}. Come back soon!"
end
。 @names.respond_to?("each"),
say_bye each, @names@ join 。 , 。
。 (type), ,
“ (Duck Typing)”, “ , , ”。
。 , join ,
。
java ?
, , java Ruby 。