【问题标题】:Class syntax, when we need or do not need symbols? [duplicate]类语法,什么时候需要或不需要符号? [复制]
【发布时间】:2013-02-09 04:05:08
【问题描述】:

所以我有一个这样的模型类:

attr_accessible :email, :firstname, :lastname, :phones_attributes

甚至像这样在该模型中进行验证:

 validates :firstname, presence: true

请注意,它们都在变量名前使用了那个“:”符号。

但是在那个模型中我有一个这样的方法:

  def name
    [firstname, lastname].join(' ')
  end

那么这次我们为什么不需要在变量名之前输入那些“:”呢?有什么不同?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    你看,你传递给attr_accessor的东西实际上并不是一个变量,而是一个变量的名字。变量的名称是一个符号,:name 是符号的文字语法。在您的 name 方法中,您实际上使用的是一个变量,而不仅仅是它的名称,因此,没有 :

    更详细地说,attr_accessor 从未直接使用该变量。相反,它使用通过名称获取变量的方法。因此,它需要名称,而不是变量。

    【讨论】:

      【解决方案2】:

      将符号视为以“Rails 方式”表示某事的简单字符串。所以这与:

      attr_accessible "email", "firstname", "lastname", "phones_attributes"
      

      但是在实例方法name中,firstname和lastname实际上被理解为model_object.firstnamemodel_object.lastname等,所以没有冒号。

      【讨论】:

      • 不完全一样,符号是内嵌的,而字符串不是。
      猜你喜欢
      • 2019-08-13
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 2017-05-23
      • 1970-01-01
      相关资源
      最近更新 更多