Ruby/Class/to String

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск

Содержание

class to string

#!/usr/bin/env ruby
class Name
  def family_name=( family )
    @family_name = family
  end
  def given_name=( given )
    @given_name = given
  end
end
n = Name.new
n.family_name= "A" # => "A"
n.given_name= "B" # => "B"
p n #<Name:0x325140 @family_name="A", @given_name="B">



Format ourselves as a string by appending our lyrics to our parent"s #to_s value.

class CD
  include Comparable
  @@plays = 0
  attr_reader :name, :artist, :duration
  attr_writer :duration
  def initialize(name, artist, duration)
    @name     = name
    @artist   = artist
    @duration = duration
    @plays    = 0
  end
  def to_s
    "CD: #@name--#@artist (#@duration)"
  end
  def inspect
    self.to_s
  end
  def <=>(other)
    self.duration <=> other.duration
  end
end
class NewCD < CD
  def initialize(name, artist, duration, lyrics)
    super(name, artist, duration)
    @lyrics = lyrics
  end
  def to_s
    super + " [#@lyrics]"
  end
end
d = NewCD.new("A", "B", 225, "C")
d.to_s



Getting a Human-Readable Printout of Any Object

a = [1,2,3]
puts a
puts a.to_s
puts a.inspect
puts /foo/          # (?-mix:foo)
puts /foo/.inspect  # /foo/



Override a to_s method after inheritance

class CD
  include Comparable
  @@plays = 0
  attr_reader :name, :artist, :duration
  attr_writer :duration
  def initialize(name, artist, duration)
    @name     = name
    @artist   = artist
    @duration = duration
    @plays    = 0
  end
  def to_s
    "CD: #@name--#@artist (#@duration)"
  end
  def inspect
    self.to_s
  end
  def <=>(other)
    self.duration <=> other.duration
  end
end
class NewCD < CD
  def initialize(name, artist, duration, lyrics)
    super(name, artist, duration)
    @lyrics = lyrics
  end
  def to_s
    super + " [#@lyrics]"
  end
end
class NewCD
  def to_s
    super
  end
end
d = NewCD.new("A", "S", 1, "C")
d.to_s