attr_accessor用于创建读取和设置实例变量的方法,例如attr_accessor :price,则相当于创建price方法用于读取@price的值,创建price=(yourprice)方法用于将@price的值设置为yourprice
attr_reader则只创建读取实例变量的方法
attr_writer只创建为实例变量赋值的方法
请看下面的例子详解:
例1
class Person
end
person = Person.new
person.name # 此处报错,提示no method errorObviously we never defined method name. Let's do that.
例2
class Person
def name
@name # simply returning an instance variable @name
end
end
person = Person.new
person.name # 不会报错,返回值为 nil
person.name = "Dennis" # 报错,提示 no method errorAha, we can read the name, but that doesn't mean we can assign the name. Those are two different methods. Former called reader and latter called writer. We didn't create the writer yet so let's do that.
例3
class Person
def name
@name
end
def name=(str)
@name = str
end
end
person = Person.new
person.name = 'Dennis'
person.name # 返回值为 "Dennis"
ruby提供了attr_accessor、attr_reader、attr_writer来让程序员免去编写上面类似代码的重复性工作。
例4
class Person
attr_reader :name
attr_writer :name
end
person = Person.new
person.name = "Dennis"
person.name # 返回值为"Dennis"
例5
class Person
attr_accessor :name
def greeting
"Hello #{@name}"
end
end
person = Person.new
person.name = "Dennis"
person.greeting # 打印"Hello Dennis"
现在明白了attr的三个类型的用法了吧!
分享到:
相关推荐
需要程序员经常刷题吗范围属性访问器 将范围访问器添加到 ruby。 您可以在私有或受保护范围内创建作者、读者和访问...protected_attr_reader :some_weird_counter end class Monkey < Primate # Monkey can def
#weak_attr_accessor 用于 用法 做这个: class MainView < UIView weak_attr_accessor :view_controller end 而不是这个: class MainView < UIView def view_controller @view_controller end def...
提供像attr_private和attr_value这样的底层方法,可以很好地补充Ruby的内置attr_accessor , attr_reader和attr_writer 。 像pattr_initialize (或attr_private_initialize )和method_object这样的更高级别的...
安装将attr_encrypted添加到您的gemfile中: gem "attr_encrypted" , "~> 3.1.0" 然后安装gem: bundle install用法如果您正在使用ActiveRecord , DataMapper或Sequel类的ORM,则使用attr_encrypted很容易: class ...
attr_typecastable attr_accessor 具有类型转换功能。要求Ruby 2.0 或更高版本安装将此行添加到应用程序的 Gemfile 中: gem 'attr_typecastable' 然后执行: $ bundle或者自己安装: $ gem install attr_...
西斯sith是Ruby的宏预处理器 仍然是原型。...* labels ) attr_reader ~ { labels } attr_writer ~ { labels }end Ruby文件 class A attr_accessor a, zendsith ruby_file.rb macro_definitions.rb > output
attr_accessor :send_email def initialize @send_email = true end def send_email? send_email end end 该类定义了一个Configuration对象,其中包含应用程序是否应该发送电子邮件的设置。 send_email设置...
使用define_method创建Ruby 内置attr_accessor方法的布尔版本。代码片段: 使用define_method attr_accessor方法 def self . attr_accessor? ( attr ) read_method = " #{ attr } ?" write_method = " #{ attr } =...
获得辨别何时实现attr_accessor , attr_reader和attr_writer 。 能够识别何时定义自己的attr_reader (getter)和attr_writer (setter)方法。 介绍 为了练习面向对象的编程(OOP),您将创建一个Person类。 ...
gem 的主要思想是将所有对象验证逻辑与对象本身分离用法假设您有以下类,并且您想验证此类的对象 class Contact attr_accessor :first_name , :last_name , :position , :age , :type , :email , :color , :status ...
实例它是什么? Instance 是一种方便且安全的API,用于访问和操作对象的状态。它是如何工作的... class Song attr_accessor :title attr_accessor :artist attr_accessor :year def initialize ( title , artist
AttrFilters 轻量级的gem,用于以零依赖关系过滤PORO(普通的旧式Ruby对象)属性。... attr_accessor :email , :first_name , :last_name , :zip , :birth_date , :due_date filters :email , trim : true , down
请记住,某些属性应该是可读可写(即attr_accessor S),而另一些可能需要只是制定者( attr_writer )或只是吸气剂( attr_reader )。 测试套件将明确这一点,因此请注意测试输出。 第二部分:对象关系 主人应该...
请记住,某些属性应该是可读可写(即attr_accessor S),而另一些可能需要只是制定者( attr_writer )或只是吸气剂( attr_reader )。 测试套件会清楚说明这一点,因此请注意测试输出。 第二部分:对象关系 主人...
请记住,某些属性应该是可读可写(即attr_accessor S),而另一些可能需要只是制定者( attr_writer )或只是吸气剂( attr_reader )。测试套件将明确这一点,因此请注意测试输出。第二部分:对象关系主人应该能够...
动态ORM目标解释为什么动态ORM对... 我们可以通过使用类来创建数据库表来实现此映射: class Song attr_accessor :name , :album attr_reader :id def initialize ( id = nil , name , album ) @id = id @name = name
动态ORM 目标 解释为什么动态ORM对我们作为开发人员有用 建立基本的动态ORM 构建一个动态ORM,任何给定的Ruby类都可以... attr_reader :id def initialize ( id = nil , name , album ) @id = id @name = name @al
attr_accessor :is_running end # Controller class JobsController def new @job = Job . new end def create @job = Job . new ( params [ :job ] ) p @job . is_running # returns String which '1' or '0...
之前有看过《ruby设计... attr_accessor :number_a,:number_b def initialize(number_a = nil, number_b = nil) @number_a = number_a @number_b = number_b end def result 0 end end #加法类 class Operatio
attr_accessor? :winning :diamond_suit: -- :check_mark: 正确执行initialize_copy :hot_beverage: -- :check_mark: Java utils( Robot包装器) :diamond_suit: -- :check_mark: 为YAML添加样式 :...