此刻刚学习Ruby,我也在学习Thor的工作方式,因此我可以编写命令行应用程序。但是,在查看这些示例之后,我无法弄清楚在方法定义之前出现了什么Ruby语言结构。查看以下代码示例......:
class MyCLI < Thor
desc "hello NAME", "say hello to NAME"
options :from => :required, :yell => :boolean
def hello(name)
output = []
output << "from: #{options[:from]}" if options[:from]
output << "Hello #{name}"
output = output.join("\n")
puts options[:yell] ? output.upcase : output
end
end
...请你告诉我'desc'和'选项'是什么。我知道他们为以下方法提供元数据,但我不理解Ruby语法。 'desc'不是实例变量,或者显然不是方法,所以它是什么。一旦我知道它是什么,我就能读到它。这类似于C#中的属性,其中方法可以使用属性进行修饰,然后可以通过反射调用进行检查。这是'desc'的情况,如果是这样,语法是什么以及它们如何与方法绑定(在本例中是方法hello)。
感谢。
注意:这个问题不是雷神;它只是以Thor为例。问题的核心是Ruby语法本身。
答案 0 :(得分:4)
您提到的方法(例如desc
)构成了Thor DSL的一部分,并充当了方便的方法。特别是方法名称desc
来自Rake。
我建议您阅读source files for Thor以了解DSL的实施方式。
答案 1 :(得分:4)