如何从命令行直接调用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
。
7条答案
按热度按时间z2acfund1#
首先,类的名称需要以大写字母开头,由于您确实希望使用静态方法,因此函数名称定义需要以
self.
开头。然后从命令行调用它,你可以这样做:
如果你用
test_function
作为示例方法,你会得到:然后你会调用它:
ecfsfe2w2#
如果您发现在命令行中输入Ruby语法很笨拙,并且您真的只想将参数传递给Ruby,那么这里还有另一种变体。下面是 test.rb:
使 test.rb 可执行并像这样运行它:
或者像这样运行:
这是因为Ruby会自动将
ARGV
数组设置为传递给脚本的参数。可以使用ARGV[0]
或ARGV.first
获取第一个参数,或者可以使用ARGV.join(' ')
将这些参数合并组合成一个字符串,用空格分隔。如果您正在执行大量命令行操作,那么您最终可能会用到Shellwords,它位于标准Ruby库中。
iugsix8n3#
如果你有多个参数在这样的例子中调用:
像这样运行它(在这种情况下,参数需要用逗号分隔)
rjee0c154#
编写Ruby脚本的通常方法是使用名为 *main * 的 * 顶级执行环境 *。你可以开始定义你在类外部编写的方法和代码,这些方法和代码将直接执行。(顺便说一句,类内部但在任何方法外部的代码也会“自行”运行。
不管怎样,我支持你...我喜欢在一个命名类中编写所有代码并示例化该类,这样您就可以将这些技术合并结合起来。让类返回自己的对象..然后使用一小部分顶层代码来分配、初始化,然后点入类。
有了这个,你可以只输入
$ ruby test.rb
,它会做你想要的。或者您可以使用chmod +x test.rb; ./test.rb
,因为我们使用了add a shebang.mrphzbgm5#
如果你正在使用命令行界面,那么我建议你看看thor。
Thor直接将命令Map到定义的类中的方法,参见thor wiki示例。
uqcuzwp86#
这只是对Inclusion的回答的一个扩展,适用于函数不输出某些内容,但返回某些内容的情况。
我们将得到以下 test.rb
然后从命令行调用它并获取返回值:
bwleehnv7#
如果你知道如何从命令行调用rb文件,
ruby yourfile.rb
这个可以帮你搞定一切
你所做的就是,在类中定义你的方法。现在你可以在定义下面调用它。如果你还想读书,就睁大你的眼睛