Crystal中的接口

3

在Crystal编程语言中是否可以使用接口的概念?

最接近的是模块,但似乎它们主要用于命名空间处理?

因此,问题更多地涉及到Golang风格的接口。

3个回答

10

您可以使用abstract

abstract class Animal
  abstract def talk
end

class Dog < Animal
  def talk # You must implement talk
    "Woof!"
  end
end

class Person
  getter pet

  def initialize(@name : String, @pet : Animal)
  end
end

john = Person.new "John", Dog.new

john.pet.talk # => "Woof!"

Crystal文档:虚拟类型和抽象类型


5
模块用于创建命名空间层次结构,但这并不是它们首要的用途(嵌套类也可以创建层次结构)。
模块被用作混入(mixin),以分组那些在不同类(或模块)中可以共享实现的方法。模块还可以包含抽象方法,这些方法的实现是具体的。
模块被明确地包含在类中,并且您可以限制模块名称上的类型,因此它们就像一个接口一样起作用。
如果您创建一个仅具有抽象方法的模块,则可以实现纯接口。

1
请参考以下链接获取更多详细信息和示例:https://github.com/crystal-lang/crystal/issues/3489 - Julien Portalier

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接