2
是否可以定義抽象靜態方法?晶體:抽象靜態方法
我想:
abstract struct MyStruct
abstract def self.myfun # ERR
abstract def MyStruct::myfun # ERR
end
是否可以定義抽象靜態方法?晶體:抽象靜態方法
我想:
abstract struct MyStruct
abstract def self.myfun # ERR
abstract def MyStruct::myfun # ERR
end
抽象類的方法不會出現是一個語言特性:
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"
我面臨同樣的問題,並找出了一個(在我看來)更好的解決方案:
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
將按照預期發出錯誤。
實例方法加單例是一種解決方法,但它可能是一種解決方案 – Mat