Ruby on rails 类语法,何时需要或不需要符号?

Ruby on rails 类语法,何时需要或不需要符号?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个这样的模型类: attr_accessible :email, :firstname, :lastname, :phones_attributes validates :firstname, presence: true def name [firstname, lastname].join(' ') end 甚至在该模型中进行如下验证: attr_accessible :email, :firstname, :lastname, :phones_attribut

我有一个这样的模型类:

attr_accessible :email, :firstname, :lastname, :phones_attributes
 validates :firstname, presence: true
  def name
    [firstname, lastname].join(' ')
  end
甚至在该模型中进行如下验证:

attr_accessible :email, :firstname, :lastname, :phones_attributes
 validates :firstname, presence: true
  def name
    [firstname, lastname].join(' ')
  end
请注意,它们都在变量名之前使用“:”符号

但在这个模型中,我有一个方法如下:

attr_accessible :email, :firstname, :lastname, :phones_attributes
 validates :firstname, presence: true
  def name
    [firstname, lastname].join(' ')
  end

那么,为什么这次我们不需要在变量名之前键入“:”呢?有什么区别

您可以看到,您传递给
attr\u accessor
的实际上不是一个变量,而是一个变量的名称。变量的名称是符号,
:name
是符号的文字语法。在
name
方法中,实际上使用的是一个变量,而不仅仅是它的名称,因此,没有


更详细地说,
attr\u accessor
从不直接使用变量。而是使用按名称获取变量的方法。因此,它需要的是名称,而不是变量。

您可以看到,传递给属性访问器的内容实际上不是变量,而是变量的名称。变量的名称是符号,
:name
是符号的文字语法。在
name
方法中,实际上使用的是一个变量,而不仅仅是它的名称,因此,没有


更详细地说,
attr\u accessor
从不直接使用变量。而是使用按名称获取变量的方法。因此,它需要的是名称,而不是变量。

将符号视为简单的字符串,以“Rails的方式”表示某些内容。这与:

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

然而,在实例方法
name
中,firstname和lastname实际上被理解为
model\u对象。firstname
model\u对象。lastname
等。因此,没有冒号。

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

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

然而,在实例方法
name
中,firstname和lastname实际上被理解为
model\u对象。firstname
model\u对象。lastname
等。因此,没有冒号。

不完全相同,符号被插入,而字符串则不完全相同。不完全相同,符号被插入,而字符串则不被插入。