是否可以定义抽象静态方法?
我正在尝试:
abstract struct MyStruct
abstract def self.myfun # ERR
abstract def MyStruct::myfun # ERR
end
答案 0 :(得分:2)
我遇到了同样的问题并且想出了一个(在我看来)更好的解决方案:
abstract class Something
module ClassMethods
abstract def some_abstract_class_method
end
extend ClassMethods
abstract def some_abstract_instance_method
end
文档中提到模块方法也可以成为 abstract ,因此这构建于此之上。
在不实现类方法some_abstract_class_method
的情况下实现此类将引发错误,如预期的那样。
答案 1 :(得分:0)
抽象类方法似乎不是一种语言特征:
abstract class Abstract
abstract self.doit
end
# => Syntax error in /home/bmiller/test.cr:23: unexpected token: self
但是你总是可以委托给一个实例:
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"