从命令行调用Ruby函数

pdkcd3nj  于 12个月前  发布在  Ruby
关注(0)|答案(7)|浏览(138)

如何从命令行直接调用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

z2acfund

z2acfund1#

首先,类的名称需要以大写字母开头,由于您确实希望使用静态方法,因此函数名称定义需要以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'"
ecfsfe2w

ecfsfe2w2#

如果您发现在命令行中输入Ruby语法很笨拙,并且您真的只想将参数传递给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(' ')将这些参数合并组合成一个字符串,用空格分隔。
如果您正在执行大量命令行操作,那么您最终可能会用到Shellwords,它位于标准Ruby库中。

iugsix8n

iugsix8n3#

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

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'"
rjee0c15

rjee0c154#

#!/usr/bin/env ruby

class A
  def run
    p :Hello_world
  end
  self
end.new.run

编写Ruby脚本的通常方法是使用名为 *main * 的 * 顶级执行环境 *。你可以开始定义你在类外部编写的方法和代码,这些方法和代码将直接执行。(顺便说一句,类内部但在任何方法外部的代码也会“自行”运行。
不管怎样,我支持你...我喜欢在一个命名类中编写所有代码并示例化该类,这样您就可以将这些技术合并结合起来。让类返回自己的对象..然后使用一小部分顶层代码来分配、初始化,然后点入类。
有了这个,你可以只输入$ ruby test.rb,它会做你想要的。或者您可以使用chmod +x test.rb; ./test.rb,因为我们使用了add a shebang.

mrphzbgm

mrphzbgm5#

如果你正在使用命令行界面,那么我建议你看看thor
Thor直接将命令Map到定义的类中的方法,参见thor wiki示例。

uqcuzwp8

uqcuzwp86#

这只是对Inclusion的回答的一个扩展,适用于函数不输出某些内容,但返回某些内容的情况。
我们将得到以下 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')"
bwleehnv

bwleehnv7#

如果你知道如何从命令行调用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

相关问题