Forum: Ruby Newbie query regarding ruby best practice

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Neowulf (Guest)
on 2006-02-02 00:40
(Received via mailing list)
Hi all,

I've just finished working on a few util scripts in Ruby to cut my
teeth and I was wondering what the best practice is with regards the
use of class methods.

E.g. Is it better to do something like this...

require 'fileutils'

FileUtils.mv(myfile,newpath)
FileUtils.cp(newpath,anotherpath)
FileUtils.rm(newpath)

or this...

fu = FileUtils.new

fu.mv(myfile,newpath)
fu.cp(newpath,anotherpath)
fu.rm(newpath)

I assume the second would only create a single instance of a
"fileutils" object, thus requiring less overhead than the first?

~Neowulf
(Guest)
on 2006-02-02 00:43
(Received via mailing list)
Welcome to Ruby! Regarding your question, let's use irb try it out...

C:\irb
irb(main):001:0> require 'fileutils'
=> true
irb(main):002:0> fu = FileUtils.new
NoMethodError: undefined method `new' for FileUtils:Module
        from (irb):2
irb(main):003:0> quit

Looks like FileUtils isn't a class and doesn't have a .new method. It's
just a module that contains a bunch of handy methods for file
operations.

FileUtils has very good documentation. Use "ri FileUtils" to see it.
Neowulf (Guest)
on 2006-02-02 01:08
(Received via mailing list)
Ah... I see.  Your not really creating an instance of the object at
all.

Thanks for the heads up.

I'm really starting to enjoy coding in Ruby.

Thanks again for the help.

Cheers,

~Neowulf
Joel VanderWerf (Guest)
on 2006-02-02 02:27
(Received via mailing list)
Neowulf wrote:
> FileUtils.mv(myfile,newpath)
>
> I assume the second would only create a single instance of a
> "fileutils" object, thus requiring less overhead than the first?
>
> ~Neowulf
>

Or

fu = FileUtils

(without the .new)

I don't think FileUtils.mv creates a new instance of FileUtils. These
are class methods, so you can call them directly on the class object
without instantiating the class.
unknown (Guest)
on 2006-02-02 08:45
(Received via mailing list)
> E.g. Is it better to do something like this...

> require 'fileutils'

> FileUtils.mv(myfile,newpath)
> FileUtils.cp(newpath,anotherpath)
> FileUtils.rm(newpath)

Try this...

require 'fileutils'
include FileUtils
mv(myfile, newpath)
cp(newpath,anotherpath)
rm(newpath)

If you are looking for a more concise way of using a module (which is
what FileUtils is), this is a common idiom for doing it.

Bret
This topic is locked and can not be replied to.