Search code examples
crystal-lang

Crystal: abstract static method


Is it possible to define abstract static methods?

I'm trying:

abstract struct MyStruct
  abstract def self.myfun  # ERR
  abstract def MyStruct::myfun  # ERR
end

Solution

  • Abstract class methods don't appear to be a language feature:

    abstract class Abstract
      abstract self.doit
    end
    # => Syntax error in /home/bmiller/test.cr:23: unexpected token: self
    

    However you could always delegate to an instance:

    abstract class Parent
      def self.instance
        @@instance ||= new
      end
    
      def self.doit
        instance.doit
      end
    
      abstract def doit
    end
    
    class Child < Parent
      def doit
        "ok"
      end
    end
    
    p Parent.doit # => can't instantiate abstract class Parent
    p Child.doit # => "ok"