这个语法在ruby中是啥意思[重复]
Posted
技术标签:
【中文标题】这个语法在ruby中是啥意思[重复]【英文标题】:what does this syntax mean in ruby [duplicate]这个语法在ruby中是什么意思[重复] 【发布时间】:2017-09-28 14:53:28 【问题描述】:我最近学习了 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
【问题讨论】:
我真的不知道 attr_accessor 做了什么,我在问:foo
语法
它们在Ruby中被称为符号,可以帮助您在线搜索文章。
【参考方案1】:
您在 Ruby 周围看到的 :foo
语法称为符号,它是 type
,就像 String
是类型一样。
在 Ruby 中,String 是可变对象,这意味着它们在声明后可以更改,但符号不能。您所说的所有示例也可以与字符串一起使用,例如:
# with Strings
attr_accessor 'foo'
validates `name`
# with Symbols
attr_accessor :foo
validates :name
但是,在 Ruby 中,使用符号是标准做法,因为它们是如何分配到内存的,而且它们在性能方面更快。字符串每次都会在内存中分配一个新空间,即使它们具有相同的内容,因为它们是可变的。然而,由于符号是不可变的,当您声明一个符号时,它在整个程序执行过程中都保留在内存中(意味着垃圾收集器不会删除它)并且还存储在一个特殊的“字典”中,该字典针对性能进行了优化,这意味着符号保留独一无二,可以非常快速地检索到。
【讨论】:
以上是关于这个语法在ruby中是啥意思[重复]的主要内容,如果未能解决你的问题,请参考以下文章