从命令行执行ruby方法

时间:2016-04-13 15:25:44

标签: ruby command-line command-line-arguments

我在Ruby中的 test_class.rb 文件中有以下类:

class TestClass

   def test_verify_one
         # DO SOME
   end

   def test_verify_two
         # DO SOME
   end

end

要执行此类,我将两个参数发送到终端,ENVIRONMENT和LANGUAGE。

所以...从终端呼叫我使用:

ruby test_class.rb ENVIRONMENT LANGUAGE

这会执行两种方法。

我只想执行一个。

我尝试了以下内容:

ruby -r "test_class.rb" -e "TestClass.test_verify_one" ENVIRONMENT LANGUAGE

但它不起作用。

你能帮助我吗?

2 个答案:

答案 0 :(得分:2)

在与test_class.rb相同的文件夹中,使用以下命令语法运行ruby命令:

ruby -I . -r "test_class" -e "TestClass.test_verify_one" arg1 arg2

打破这个命令我们得到:

-I .在$ LOAD_PATH中包含当前目录,以便我们可以使用require

-r需要$ LOAD_PATH中名为test_class的文件。这是可能的,因为我们在上面的加载路径中包含了当前目录(.rb扩展名在这里是可选的)。

-e与您提供的相同,请评估以下代码。

现在,如果我们在该方法中调用ARGV,我们应该在不同的行中arg1arg2

#...
def self.test_verify_one
  puts ARGV
end
#...

答案 1 :(得分:0)

如果你想让你的第一个方法获取你传递给它的变量,你需要定义你的第一个方法来获取两个变量,如:

class TestClass

    def test_verify_one (var1, var2)
             # DO SOME
       end

       def test_verify_two
             # DO SOME
       end

end

然后你需要在你的第二个条件中放入一个条件,使它只能在你想要它的条件下执行......或者只是在你现在不需要的时候将它注释掉。因此,例如,如果您只想在未传入变量时触发测试2,那么您的代码将如下所示:

class TestClass

    def test_verify_one (var1, var2)
        # DO SOME
    end

    def test_verify_two (var1, var2)
        if (var1 and var2) defined? nil
        # DO SOME
    end

end