Tbpgr Blog

元エンジニア 人事 tbpgr(てぃーびー) のブログ

Ruby | Module | attr

概要

Module#attr(name, assignable = false) -> nil

詳細

インスタンス変数読み取りのためのインスタンスメソッド name を定義する。

つまり

class Person
  attr :name
  def initialize(name)
    @name = name
  end
end

class Person
  def initialize(name)
    @name = name
  end

  def name
    @name
  end
end

と同じです。

assignable を true にした場合、書き込みも可能。
ただし、-w オプション付きで実行した場合 assignable を使用すると警告が出ます。

サンプルコード
require 'pp'

class Person
  attr :name
  attr :age
  def initialize(name, age)
    @name, @age = name, age
  end
end

person = Person.new('tanaka', 33)
pp person

class PersonWritable
  attr :name, true
  attr :age, true
  def initialize(name, age)
    @name, @age = name, age
  end
end

person = PersonWritable.new('tanaka', 33)
person.age = 55
pp person

出力

$ ruby -w module_attr.rb
#<Person:0x0000060038c268 @age=33, @name="tanaka">
module_attr.rb:15: warning: optional boolean argument is obsoleted
module_attr.rb:16: warning: optional boolean argument is obsoleted
#<PersonWritable:0x0000060038ab98 @age=55, @name="tanaka">