什么是这个Ruby语言构造,在方法定义旁边

时间:2015-02-28 09:45:42

标签: ruby

此刻刚学习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语法本身。

2 个答案:

答案 0 :(得分:4)

您提到的方法(例如desc)构成了Thor DSL的一部分,并充当了方便的方法。特别是方法名称desc来自Rake

我建议您阅读source files for Thor以了解DSL的实施方式。

答案 1 :(得分:4)

它们只是类方法调用,此处为desc,此处Thor类定义为options