On 31.10.2006 10:19, mikeharder / gmail.com wrote: > I'm new to Ruby, so please excuse any ignorance on my part. I read the > following article about Ruby and "duck typing": > > http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/100511 > > I got the impression that duck typing is the "right" way to do things > in Ruby. However, the Ruby Standard Library itself doesn't seem to use > duck typing. Consider the following example: > > irb(main):001:0> require 'set' > => true > irb(main):002:0> s = Set.new > => #<Set: {}> > irb(main):003:0> s.superset? 0 > ArgumentError: value must be a set > > It seems like the "superset?" method explicitly checks that its > parameter is a set. This is approach #1 in the "duck typing" article > above, which the article claims is not "the Ruby way". > > So, what gives? If it's wrong to "try to make Ruby do Static Typing" > (as the article says), then why does the Ruby Standard Library do it? It is just giving you a nicer error message. Otherwise, this might happen: irb(main):003:0> def foo(s) s=s.to_set end => nil irb(main):004:0> foo [] => #<Set: {}> irb(main):005:0> foo Set.new => #<Set: {}> irb(main):006:0> foo 0 NoMethodError: undefined method `to_set' for 0:Fixnum from (irb):3:in `foo' from (irb):6 Note that there must be an exception of some kind if the parameter is inappropriate. And no, this is not static typing. Kind regards robert