Ruby 和 OO 很新。研究教科书,以及谷歌在雷神上找到的所有文章。
我让 Thor 努力捕获多个命令行参数和选项。不过,我想从 Cli < Thor 类之外进行其余的编程,并且无法从 Cli 类之外访问命令行参数。
问题:
Q1。Cli < Thor 类是否可以像任何其他 ruby 类一样对待,或者从 Thor 继承或“Cli.start”命令是否会削弱 Cli 类的某些功能而不是不使用 Thor?问是因为我可能根本不知道如何从不使用初始化方法的类外部访问实例变量。Thor不会让我使用initialize方法来引入命令行变量,可能是因为initialize是ruby中的一个保留方法名。
Q2。如何从 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>'
以下工作没有 Thor 并使用初始化方法和 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
输出:
$ ./create_wo_thor.rb
a