Prev: Mocking a method with a block
Next: each method
From: Hd Pwnz0r on 31 Jul 2010 17:46 Hi. I'm learning Ruby and I want to know how to make a script have an argument, i.e. ruby script.rb 3 2 So far I have this: abort "Correct syntax is ruby [script].rb [number to exponentially multiply by] [exponent]" unless ARGV.size == 2 var = gets.chomp var2 = gets.chomp puts (var.to_i ** var2) It's a simple exponential calculator. I get this error when trying to run it with 2 arguments (2 and 3). exponent.rb:2:in `gets': No such file or directory - 2 (Errno::ENOENT) from exponent.rb:2:in `gets' from exponent.rb:2:in `<main>' Attachments: http://www.ruby-forum.com/attachment/4895/exponent.rb -- Posted via http://www.ruby-forum.com/.
From: Jesús Gabriel y Galán on 31 Jul 2010 19:13 On Sat, Jul 31, 2010 at 11:46 PM, Hd Pwnz0r <human.dictionary(a)rocketmail.com> wrote: > Hi. > > I'm learning Ruby and I want to know how to make a script have an > argument, i.e. > > ruby script.rb 3 2 > > So far I have this: > > abort "Correct syntax is ruby [script].rb [number to exponentially > multiply by] [exponent]" unless ARGV.size == 2 > var = gets.chomp > var2 = gets.chomp You have the program arguments in the ARGV array, as you probably know, since you've used it in the previous line: var = ARGV[0].to_i var2 = ARGV[1].to_i (I've added the to_i, since it seems you want to use them as numbers) > puts (var.to_i ** var2) > > It's a simple exponential calculator. > > I get this error when trying to run it with 2 arguments (2 and 3). > > exponent.rb:2:in `gets': No such file or directory - 2 (Errno::ENOENT) > from exponent.rb:2:in `gets' from exponent.rb:2:in `<main>' Jesus.
From: James Harrison on 1 Aug 2010 02:16 On Jul 31, 2010, at 3:46 PM 7/31/10, Hd Pwnz0r wrote: > Hi. > > I'm learning Ruby and I want to know how to make a script have an > argument, i.e. > > ruby script.rb 3 2 > > So far I have this: > > abort "Correct syntax is ruby [script].rb [number to exponentially > multiply by] [exponent]" unless ARGV.size == 2 > var = gets.chomp > var2 = gets.chomp > puts (var.to_i ** var2) > > It's a simple exponential calculator. > > I get this error when trying to run it with 2 arguments (2 and 3). > > exponent.rb:2:in `gets': No such file or directory - 2 (Errno::ENOENT) > from exponent.rb:2:in `gets' from exponent.rb:2:in `<main>' > > gets reads from an IO stream, not the arguments on the command line: http://ruby-doc.org/core/classes/IO.html#M002272 The arguments on the command line are stored in the ARGV array. That's why you check ARGV's size to verify that there are only 2 arguments. So the code should read the options out of the ARGV array, not trying to gets things. There are a couple of ways to do this. My favourite looks like: var = ARGV.shift var2 = ARGV.shift A couple of more complicated ways, but more flexible ways, of getting command line arguments are optionparser and getopts. I typically use getopts, with no real rationale behind it than that I learned it that way first.
|
Pages: 1 Prev: Mocking a method with a block Next: each method |