使用命令行来控制ruby程序

时间:2012-10-08 22:44:24

标签: ruby grid command-line-interface

我正在尝试创建一个图像生成器,它可以创建一个带有参数的网格,其中x表示行,y表示列作为坐标。我现在要做的是通过输入命令获取命令行来控制程序我将调用的方法的参数到目前为止我的代码如下所示。我能做些什么才能让它发挥作用。例如,要创建新图像I,5,6。

命令行:

    require 'pixel'

    print "Hello please enter a command in : >> "
    command = gets.chomp

    case command
    when "i", "I"
     i = Image.new(m=5,n=6)
    when "c","C"
     i.clear
    when "l","L" 
     i.add_color(x,y,c) 
    when "v","V" 
     i.vertical(x,y1,y2,c)
    when "h","H" 
     i.horizontal(x1,x2,y,c)
    when "f","F" 
     i.fill(x,y,c)
    when "s","S" 
     i.s
    when "x","X" 
     exit
    else
      puts "Opps command does not exist"
    exit
    end

Ruby图像生成器代码:

    class Image
      attr_accessor :m,:n

    def initialize(m,n)
     @m = m
     @n = n
     @image_array = Array.new(@n) {Array.new(@m).fill{(0)}}
    end

    def add_color(x,y,c)   
     x = x 
     y = y - 2
     @image_array[x][y] = c  
    end  

   def vertical(x,y1,y2,c)
    x = x - 1
    y1 = y1 - 1
    y2 = y2 - 1
    @image_array[y1..y2].each {|row| row[x] = c }
   end

  def horizontal(y,x1,x2,c)
   y = y - 2
   z = x2...x1
  @image_array[y].fill(c,z) 
 end

 def fill(x,y,c)
  x = x - 1 
  y = y - 1
  s = x * y
  s.upto(1).to_a
  y.upto(1).to_a

  @image_array[1..s].each {|r| r[y]=c }
  @image_array[1..s].fill(c,s)
end

def s
 p @image_array
end

def clear(m,n)
 @image_array = Array.new(@n) {Array.new(@m).fill{(0)}}
end
end

命令行代码中有什么问题阻止它工作?

2 个答案:

答案 0 :(得分:0)

您发现命令行参数位于全局变量/数组ARGV

http://www.ruby-doc.org/docs/ProgrammingRuby/html/rubyworld.html

有几个库可以帮助您进行命令行解析。 一个较旧的,已经是标准库的一部分,是optparse。

这里我做了一个如何使用它的例子: http://pleac.sourceforge.net/pleac_ruby/userinterfaces.html

答案 1 :(得分:0)