From: "Schüle Daniel" Date: 2006-10-24T05:45:17+09:00 Subject: Re: File::open and File.open Robert Klemme schrieb: > 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. I was bitten by it more than once is there more to it ... i mean ambiguity is usually not what one wants to have in the language (at least not in the computer language :-) Regards, Daniel