【发布时间】:2017-01-14 14:34:32
【问题描述】:
是否可以定义抽象的静态方法?
我正在尝试:
abstract struct MyStruct
abstract def self.myfun # ERR
abstract def MyStruct::myfun # ERR
end
【问题讨论】:
标签: crystal-lang
是否可以定义抽象的静态方法?
我正在尝试:
abstract struct MyStruct
abstract def self.myfun # ERR
abstract def MyStruct::myfun # ERR
end
【问题讨论】:
标签: crystal-lang
我遇到了同样的问题并想出了一个(在我看来)更好的解决方案:
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的情况下实现这个类会引发错误,正如预期的那样。
【讨论】:
抽象类方法似乎不是语言特性:
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"
【讨论】: