【问题标题】:What does the "set" keyword mean in ruby?ruby 中的“set”关键字是什么意思?
【发布时间】:2013-12-09 17:40:49
【问题描述】:

我正在阅读 capistrano 手册

https://github.com/leehambley/capistrano-handbook/blob/master/index.markdown

并看到关键字“set”出现

set :deploy_via, :remote_cache

在本例中设置是否将符号:deploy_via 设置为:remote_cache

【问题讨论】:

  • set 不是 ruby​​ 关键字是 capistrano 命令

标签: ruby capistrano


【解决方案1】:

这不是标准 Ruby 中的关键字。它是领域特定语言 (DSL) 中元素的一个示例。

基本上,DSL 允许您通过提供比 Ruby 等通用语言更具针对性的构造来在更高的抽象级别上工作。这里的“set”就是一个例子。它可能只是您实际调用的 Ruby 中的一个函数,但是当您使用它时,它本身更像是一种语言结构。 Ruby 尤其擅长编写 DSL

至于它在 Capistrano 中的作用,我不知道,我从未使用过 Capistrano。 :)

【讨论】:

    【解决方案2】:

    set 不是 capistrano 命令中的 ruby​​ 关键字
    来自 capistrano 来源

     def set(key, value)
       @properties[key] = value
     end
    

    【讨论】:

      【解决方案3】:

      set 在 Ruby 中没有特殊含义。实际上,它不是 Ruby 关键字,而是 Capistrano 命令,是 Capistrano DSL 的一部分。

      从技术上讲,它是一种 Ruby 方法。你可以看到method definition

      def set(key, value)
        config[key] = value
      end
      

      【讨论】:

        【解决方案4】:

        其他人抢了我的风头,但here 是在 Capistrano DSL 的背景下对set 的讨论:

        "此方法是定义可在 Capistrano 配置中的任何位置访问的变量的主要方法。它允许您设置立即变量和延迟变量,具体取决于您是否使用块来定义变量.

        【讨论】:

          【解决方案5】:

          它可以被称为“bareword”,但不是 keyword,因为这就是 Ruby 为该语言命名“保留词”集合的方式。因此,它要么是一个变量,要么是一个方法名,因为它没有以 @ 或 $ 或 @@ 开头,并且没有大写。

          实际上只是一种方法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-14
            • 2010-10-29
            • 2011-10-28
            • 1970-01-01
            相关资源
            最近更新 更多