HiveBrain v1.2.0
Get Started
← Back to all entries
patternrubyCritical

Ruby: Calling class method from instance

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
instancefromclasscallingmethodruby

Problem

In Ruby, how do you call a class method from one of that class's instances? Say I have

class Truck
  def self.default_make
    # Class method.
    "mac"
  end

  def initialize
    # Instance method.
    Truck.default_make  # gets the default via the class's method.
    # But: I wish to avoid mentioning Truck. Seems I'm repeating myself.
  end
end


the line Truck.default_make retrieves the default. But is there a way of saying this without mentioning Truck? It seems like there should be.

Solution

Rather than referring to the literal name of the class, inside an instance method you can just call self.class.whatever.

class Foo
    def self.some_class_method
        puts self
    end

    def some_instance_method
        self.class.some_class_method
    end
end

print "Class method: "
Foo.some_class_method

print "Instance method: "
Foo.new.some_instance_method


Outputs:

Class method: Foo
Instance method: Foo

Code Snippets

class Foo
    def self.some_class_method
        puts self
    end

    def some_instance_method
        self.class.some_class_method
    end
end

print "Class method: "
Foo.some_class_method

print "Instance method: "
Foo.new.some_instance_method

Context

Stack Overflow Q#2527830, score: 656

Revisions (0)

No revisions yet.