CSc 372 - Comparative Programming Languages
33 : Ruby -- Types

Christian Collberg

Department of Computer Science

University of Arizona

1 Compile-time type-checking

2 Compile-time type-checking...

3 Run-time type-checking

4 Ruby Typing

5 Ruby Typing

class Logger
   def initialize()
      @f = File.open("logfile", "w")
   end

   def log(message)
      @f << message
   end
end

l = Logger.new
l.log("Ducks ahoy!\n")

6 Ruby Typing...

class Logger
   def initialize()
      @f = ""
   end

   def log(message)
      @f << message
   end
end

7 Ruby Typing...

class Logger
   def initialize()
      @f = []
   end

   def log(message)
      @f << message
   end
end

l = Logger.new
l.log("Ducks ahoy!\n")

8 Ruby Type ``Checking''

class Logger
   def initialize()
      @f = {}
   end
   def log(message)
      unless @f.respond_to?(:<<)
         fail TypeError.new("log needs <<")
      end
      @f << message
   end
end

9 Ruby Type ``Checking''...

10 Readings

11 Well-Travelled Ducks

\scalebox{0.5}{\includegraphics{PS/duck.ps}}

From http://www.dailymail.co.uk/pages/live/articles/news/news.html?in_article_id=464768



Christian S. Collberg
2007-11-14