oop/writer_methods_parens.rb

tests/_examples/oop/writer_methods_parens.rb in the metorex repository.

# A writer method can name its parameter without parentheses. The `=` has to
# sit against the name; with a space before it, the definition is an endless
# one whose body is the expression on the right.

class Meter
  def initialize
    @reading = 0
  end

  def reading
    @reading
  end

  def reading= value
    @reading = value
  end

  def doubled = @reading * 2

  def scaled= factor
    @reading = @reading * factor
  end
end

meter = Meter.new
meter.reading = 12
p(meter.reading)
p(meter.doubled)

meter.scaled = 3
p(meter.reading)

class Register
  def self.total
    @total
  end

  def self.total= amount
    @total = amount
  end
end

Register.total = 99
p(Register.singleton_methods.sort)

# A writer defined this way is named the way any other writer is.
p(Meter.instance_methods(false).sort)

Output:

12
24
36
[:total, :total=]
[:doubled, :reading, :reading=, :scaled=]