ruby - 方法定义旁边的 Ruby 语言结构是什么

标签 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'和'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/

相关文章:

javascript - Uncaught ReferenceError : jQuery is not defined in console for Rails 5

ruby-on-rails - 使用 active_admin 进行 Heroku 部署

html - 删除前导和尾随的换行符

ruby - gem 和 require 的区别(require open-uri)

ruby - 上帝(ruby 进程管理器)不断重启我的进程

ruby - 从模块上下文中加载 Ruby 文件?

ruby - 较短的案例陈述

arrays - 在 Ruby 中对具有相似模式的字符串进行分组

ruby - Datamapper 在通过 thin (sinatra) 访问时删除 sqlite 数据库

ruby - 在 Windows 7 上使用 Ruby 2.3 安装 Mechanize 出现错误