对Ruby和OO来说很新颖。学习课本,以及谷歌在雷神发现的所有文章。从Thor类的外部访问命令行参数
我有Thor工作捕获多个命令行参数和选项。我想从Cli < Thor类之外完成其余的编程,并且无法从Cli类外部访问命令行参数。
问题:
Q1。 Cli < Thor类可以像任何其他ruby类一样处理,还是继承自Thor或“Cli.start”命令,可以削弱Cli类的某些功能而不使用Thor?询问是因为我可能根本不知道如何从不使用initialize方法的类外部访问实例变量。 Thor不会让我使用initialize方法来引入命令行变量,可能是因为initialize是ruby中的保留方法名称。 Q2302。我如何从Thor类外部访问命令行参数变量a和b?
这里是我的代码
#!/usr/bin/env ruby
require 'thor'
class Cli < Thor
attr_reader :a, :b
method_option :add, :type => :string, :desc => 'add servers'
method_option :prod, :type => :string, :desc => 'production stack'
desc "tier <stack folder name> <app | web>", "creates an app or web server tier for the stack"
def tier(a,b)
@a = a
@b = b
puts a
puts b
end
end
Cli.start
arguments = Cli.new
puts "the first argument is #{arguments.a}"
这里的结果。关闭(也许)。没有错误,但arguments.a是零。
$ ./create.rb tier a b
a
b
the first argument is
-
puts arguments.tier.a
扔了错误:
./create.rb:11:in `tier': wrong number of arguments (0 for 2) (ArgumentError)
from ./create.rb:23:in `<main>'
下没有雷神工程和使用initialize方法和attr_reader,直出的教科书。尽管如此,却无法弄清楚如何从非初始化方法访问变量。
#!/usr/bin/env ruby
class Cli
attr_reader :a, :b
def initialize(a,b)
@a = a
@b = b
end
end
arguments = Cli.new("a","b")
puts arguments.a
outupt:
$ ./create_wo_thor.rb
a
超级彻底和清晰的解释,达山。谢谢! – 2013-04-25 22:24:30
非常受欢迎,保罗! – 2013-04-25 22:26:16
关于ARGV仍然可用的好处!有趣的是,ARGV忽略了命令行上的方法名称。换句话说,对于./thor层中的B,ARGV [1]是“一”,而不是“层”。想知道如果托尔处理分配给ARGV []。 – 2013-04-25 22:38:24