从命令行调用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