2017-01-14 2 views
2

추상 정적 메서드를 정의 할 수 있습니까?크리스탈 : 추상 정적 메서드

나는 시도하고있다 :

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

답변

1

추상 클래스 메소드는 언어 기능으로 표시되지 않습니다 :

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" 
: 당신은 항상 인스턴스에 위임 할 수있다 그러나

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

+0

인스턴스 메서드와 싱글 톤은 해결 방법이지만 해결 방법이 될 수 있습니다. – Mat

0

나는 똑같은 문제에 직면하여 내 의견으로는 더 좋은 해결책을 찾았다.

abstract class Something 
    module ClassMethods 
    abstract def some_abstract_class_method 
    end 

    extend ClassMethods 

    abstract def some_abstract_instance_method 
end 

문서는 모듈 방법뿐만 아니라 추상적 인을 할 수 있음을 언급, 그래서 이것은 그 위에 구축합니다.

some_abstract_class_method 클래스 메서드를 구현하지 않고이 클래스를 구현하면 예상대로 오류가 발생합니다.