从命令行调用ruby函数

我如何直接从命令行调用ruby函数?

试想一下,我会有这个脚本test.rb

class TestClass def self.test_function(some_var) puts "I got the following variable: #{some_var}" end end 

如果这个脚本是从命令行( ruby test.rb )运行,没有任何反应(按照预期)。

有没有像ruby test.rb TestClass.test_function('someTextString') ? 我想获得以下输出: I got the following variable: someTextString

首先,这个类的名字需要以大写字母开始,因为你真的想使用静态方法,函数名定义需要以self.开始self.

 class TestClass def self.test_function(someVar) puts "I got the following variable: " + someVar end end 

然后从命令行调用它可以做到:

 ruby -r "./test.rb" -e "TestClass.test_function 'hi'" 

如果您将test_function作为实例方法,则您将拥有:

 class TestClass def test_function(someVar) puts "I got the following variable: " + someVar end end 

那么你可以用下面的方法调用它:

 ruby -r "./test.rb" -e "TestClass.new.test_function 'hi'" 

如果你发现在命令行键入ruby语法很尴尬,而你真的只想把args传递给ruby,这里还有另外一个变种。 这里是test.rb:

 #!/usr/bin/env ruby class TestClass def self.test_function(some_var) puts "I got the following variable: #{some_var}" end end TestClass.test_function(ARGV[0]) 

使test.rb可执行文件像这样运行:

 ./test.rb "Some Value" 

或者像这样运行它:

 ruby test.rb "Some Value" 

这是有效的,因为ruby自动将ARGV数组设置为传递给脚本的参数。 您可以使用ARGV[0]ARGV.first获取第一个参数,也可以使用ARGV.join(' ')将参数组合为一个由空格分隔的string。

如果你在做大量的命令行工作,你最终可能会使用标准的ruby库中的Shellwords 。

 #!/usr/bin/env ruby class A def run p :Hello_world end self end.new.run 

脚本Ruby的常用方法是使用名为main顶级执行环境 你可以开始定义你在类之外编写的方法和代码,这些将被直接执行。 (顺便说一下,类内的代码,但不包括任何方法的代码也会自行运行。)

无论如何,我和你在一起…我喜欢把所有的代码写在一个命名的类中,并实例化这个类,所以你可以把这些技术结合起来。让类返回它自己的对象..然后只用一点点级别的代码分配,初始化,然后点入类。

有了这个,你可以input$ ruby test.rb ,它会做你想做的。 或者你可以通过chmod +x test.rb; ./test.rb chmod +x test.rb; ./test.rb因为我们添加了一个shebang。

如果你正在使用命令行界面,那么我build议看看thor 。

Thor直接将您的命令映射到已定义类中的方法,请参阅thor wiki的示例。

如果你有多个参数来调用这样的例子:

 class TestClass def self.test_function(some_var1, some_var2) puts "I got the following variables: #{some_var1}, #{some_var2}" end end 

像这样运行(在这种情况下,参数需要用逗号分隔)

 ruby -r "./test.rb" -e "TestClass.new.test_function 'hi','Mike'" 

只是Ingenu的答案的一个扩展,该函数不打印出来,但返回的东西。

我们将有以下test.rb

 class TestClass def self.test_function(some_var) return "I got the following variable: " + some_var end end 

然后从命令行调用它并获得返回值:

 ruby -r "./test.rb" -e "puts TestClass.test_function('hi')" 

如果你知道如何从命令行调用一个rb文件

ruby yourfile.rb

这可以为你做完整的诡计。

你所做的是,只是在课堂上定义你的方法。 现在你可以在定义下面调用它。 如果你仍然想读,睁大你的眼睛

 class TestClass def self.test_function(some_var) puts "I got the following variable: #{some_var}" end test_function(var) end