这种语法在红宝石中意味着什么



我最近拿起了Ruby和Rails,并在Ruby中看到了此:foo语法,其中包含After_accessor之类的东西,使用模型方法,但我不太了解。该语法的名字是什么,它是什么?见证案例的一个例子

class Dog
    attr_accessor :name
end
///second scenario
class CreatePurchases < ActiveRecord::Migration
def change
create_table :purchases do |t|
  t.string :name
  t.float :cost
  t.timestamps
  end
 end
end
//third scenario
class Purchase < ActiveRecord::Base
  validates :name, presence: true
  validates :cost, numericallity: {greater than : 0}
end

您在Ruby周围看到的:foo语法称为符号,它是type,就像String是一种类型一样。在红宝石字符串中是可变的对象,这意味着它们在声明后可以更改,但是符号不能。您所说的所有示例也可以与字符串一起使用,例如:

# with Strings
attr_accessor 'foo'
validates `name`
# with Symbols
attr_accessor :foo
validates :name

但是,在Ruby中,使用符号是标准实践,因为它们如何分配给内存,并且因为它们在性能方面更快。字符串每次都会在记忆中分配一个新的空间,即使它们具有相同的内容,因为它们是可变的。但是,由于符号是不可变的,当您声明一个符号时,它在整个程序中都保留在内存中(这意味着垃圾收集器不会删除它(,并且也存储在特殊的"字典"中,该符号对性能进行了优化,这意味着符号停留,独特,可以很快检索。

最新更新