ruby基本文法(2)


        ,      ,      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       。