Newbie query regarding ruby best practice

N

Neowulf

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
 
R

rmagick

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.
 
N

Neowulf

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
 
J

Joel VanderWerf

Neowulf said:
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

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.
 
B

bpettichord

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top