【问题标题】:declaring some class parameters outside a class在类之外声明一些类参数
【发布时间】:2013-07-02 15:14:19
【问题描述】:

我想了解为什么在1_settings.rb rails 应用程序初始化应用程序中,Settings 参数的某些方法在类Settings 之外声明。为什么准确的意思?我们可以把它们当作Settings 方法吗? (如果是,为什么不将它们包含在类中)

顺便说一句,namespace 关键字在哪里定义(它是指 ruby​​ 关键字还是所有其他地方定义的 namespace 类)?

class Settings < Settingslogic
  source "#{Rails.root}/config/applab.yml"
  namespace Rails.env

  class << self
    def applab_on_non_standard_port?
      ![443, 80].include?(applab.port.to_i)
    end
...    
  end
end

...
# Default settings
Settings['ldap'] ||= Settingslogic.new({})
Settings.ldap['enabled'] = false if Settings.ldap['enabled'].nil?

【问题讨论】:

    标签: ruby-on-rails class methods


    【解决方案1】:
    Settings['ldap'] ||= Settingslogic.new({})
    

    相当于:

    Settings.[]('ldap') || Settings.[]=('ldap', Settingslogic.new({}))
    

    所以这些只是[][]= 调用的简单方法Settings 类(这也是一个对象)具有适当的参数。

    【讨论】:

    • 对不起,我对ruby真的不熟悉,[][]=是什么方法
    • @Newben 我不明白你的问题。你能说得更准确点吗?
    • 其实我猜.[]= 是一个捷径,但是什么呢?顺便说一句,为什么要在一个类之外但在同一个文件上声明一个类的方法
    • 不,相反。 Settings[]Settings.[]() 的快捷方式
    • @Newben 正如@MichaelSzyndler 所说-Settings[]Settings.[]() 的语法糖。这种构造不是声明一个方法,而是调用(已经定义的)方法。为什么他们被这样称呼?可能是因为它比在类中调用它们更清晰。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    相关资源
    最近更新 更多