Crystal:抽象静态方法

时间:2017-01-14 14:34:32

标签: crystal-lang

是否可以定义抽象静态方法?

我正在尝试:

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

2 个答案:

答案 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"