这个语法在ruby中意味着什么

时间:2017-05-01 05:53:37

标签: ruby-on-rails ruby

我最近选择了ruby和rails,并且在ruby中看到了这个:foo语法,比如attr_accessor,在rails中使用模型方法,但我不太明白。这个语法的名称是什么,它有什么作用? 看见案例的一个例子

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

1 个答案:

答案 0 :(得分:1)

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

# with Strings
attr_accessor 'foo'
validates `name`

# with Symbols
attr_accessor :foo
validates :name

然而在Ruby中,标准做法是使用符号,因为它们如何分配给内存,因为它们在性能方面更快。每次在字符串中为字符串分配一个新空间,即使它们具有相同的内容,因为它们是可变的。但是,由于符号是不可变的,当您声明符号时,它会在整个程序执行期间保留在内存中(意味着垃圾收集器不会将其删除),并且还存储在特殊的字典中,该字典针对性能进行了优化这意味着符号保持唯一并且可以非常快速地检索。