From: Robert Klemme Date: 2006-10-24T05:30:18+09:00 Subject: Re: File::open and File.open Brad Tilley wrote: > What exactly is the difference between these? :: is a class method while > is an instance method??? If that is so, could someone clarify this > with more detail? I use File.open, but File::open works too. The same method (a class method) is called. It is just a syntactic difference. So these are the same File.open("foo") ... File::open("foo") ... > However > sometimes, this is not the case which adds to my confusion :) For > example, I can only do Digest::MD5.new() and not Digest.MD5.new() why is > that? Because the "." cannot be used for constant lookup: irb(main):005:0> File.NONBLOCK NoMethodError: undefined method `NONBLOCK' for File:Class from (irb):5 from :0 irb(main):006:0> File::NONBLOCK => 16384 "." is reserved for method invocations. > I don't fully understand OO programming... perhaps this is my problem. Nah, I think it is rather a minor ambiguity in the language that causes confusion. Usually people disambiguate it by using "." for methods and "::" for constants only although they could use it for class methods as well. Kind regards robert