Class methods belong to the class itself and are called without creating an object first.

class method A method defined as `self.method_name` is called on the class rather than on an instance.

Class Methods

score
class_methods.rb
Replay: real traced execution (multi-file project)
class Grade
  def self.passing?(score)
    score >= 70
  end

  def self.label(score)
    passing?(score) ? "pass" : "review"
  end
end

score = 82

puts "score=#{score}"
puts "status=#{Grade.label(score)}"
class Grade
  def self.passing?(score)
    score >= 70
  end

  def self.label(score)
    passing?(score) ? "pass" : "review"
  end
end

score = 55

puts "score=#{score}"
puts "status=#{Grade.label(score)}"
class Grade
  def self.passing?(score)
    score >= 70
  end

  def self.label(score)
    passing?(score) ? "pass" : "review"
  end
end

score = 70

puts "score=#{score}"
puts "status=#{Grade.label(score)}"
  1. score ← 82

    11score→ 82 = 82  #@score=55, 701213puts "score=#{score82}"14puts "status=#{Grade.label(score)pass}"
    outputscore=82
  2. def self.label(score)

    6def self.label(score82)7  passing?(score82) ? "pass" : "review"8end
  3. def self.passing?(score)

    1class Grade2  def self.passing?(score82)3    score82 >= 704  end
  4. puts "status=#{Grade.label(score)}"

    13puts "score=#{score}"14puts "status=#{Grade.label(score)pass}"
    outputstatus=pass
  1. score ← 55

    11score→ 55 = 551213puts "score=#{score55}"14puts "status=#{Grade.label(score)review}"
    outputscore=55
  2. def self.label(score)

    6def self.label(score55)7  passing?(score55) ? "pass" : "review"8end
  3. def self.passing?(score)

    1class Grade2  def self.passing?(score55)3    score55 >= 704  end
  4. puts "status=#{Grade.label(score)}"

    13puts "score=#{score}"14puts "status=#{Grade.label(score)review}"
    outputstatus=review
  1. score ← 70

    11score→ 70 = 701213puts "score=#{score70}"14puts "status=#{Grade.label(score)pass}"
    outputscore=70
  2. def self.label(score)

    6def self.label(score70)7  passing?(score70) ? "pass" : "review"8end
  3. def self.passing?(score)

    1class Grade2  def self.passing?(score70)3    score70 >= 704  end
  4. puts "status=#{Grade.label(score)}"

    13puts "score=#{score}"14puts "status=#{Grade.label(score)pass}"
    outputstatus=pass