I just took a program that works using a command line argument and
turned it
into a class so that I could require it from . Anyway, I was just
wondering
how you would pass somethign to it now as an argument.
if the syntax of the original program was ‘ruby program.rb Jason’ and
the
program did stuff with ‘Jason’, how would I go about making another
program
(a GUI for example) pass along information into that program as an
argument? I can’t seem to get this to work. I’ve tried variants of the
following:
psuedo code (saved as program2.rb):
‘require program.rb’
b = ‘Jason’
a = ClassNameInProgram.new(b)
a = ClassNameInProgram.new {b}
a = ClassNameInProgram.new b
If I run ‘ruby program2.rb Jason’, I get the same output as if I’d run ’
program.rb Jason’. What am I not doing correctly? Hopefully I’ve
explained
this adequately and hopefully I’m not being incredibly stupid.
On 12/22/06, Jason M. [email protected] wrote:
‘require program.rb’
b = ‘Jason’
a = ClassNameInProgram.new(b)
a = ClassNameInProgram.new {b}
a = ClassNameInProgram.new b
If I run ‘ruby program2.rb Jason’, I get the same output as if I’d run ’
program.rb Jason’. What am I not doing correctly? Hopefully I’ve explained
this adequately and hopefully I’m not being incredibly stupid.
- if you have
class ClassName…
def initialize
…ARGV[0]…
end
end
turn it into
class ClassName…
def initialize(*argv)
…argv[0]…
end
end
or
class ClassName…
def initialize(arg0, arg1, arg2)
…arg0…
end
end
- you can have both varieties:
do the above changes and
at the very end of the file put the following:
if FILE == $0
ClassName…new(*ARGV)
end
Notes:
A bit safer way is to write
if File.expand(FILE) == File.expand($0)
to handle program.rb vs ./program.rb cases
*ARGV “expands” the ARGV array as the actual parameters to new.
I.e. it is the same as calling new(ARGV[0], ARGV[1],…) It’s a handy
trick,
that can be used in case statements as well. (arr = [1,2,3], … when
*arr)
- In the case of wrapping a script I usually split the code into
initialization (new/initialize) and actual processing
(run/process/whatever).