目前我正在学习 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'和'options'是什么。我知道他们为以下方法提供元数据,但我不了解 Ruby 语法。 'desc' 不是实例变量,或者显然不是方法,那么它是什么。一旦我知道它是什么,我就可以阅读它。这类似于 C# 中的属性,其中可以使用属性装饰方法,然后可以通过反射调用检查这些属性。 'desc' 是否属于这种情况,如果是,语法是什么以及它们如何与方法相关联(在本例中为方法 hello)。
谢谢。
注意:这个问题与雷神无关;它只是以雷神为例。问题的核心是 Ruby 语法本身。
最佳答案
您提到的方法(例如 desc
)构成了 Thor 的 DSL 的一部分。并充当 .特别是方法名称 desc
是从 Rake 中获取的。 .
我鼓励您阅读 source files for Thor了解 DSL 是如何实现的。
关于ruby - 方法定义旁边的 Ruby 语言结构是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28780315/