是否有可能在Crystal编程语言中使用接口的概念?
接近的是模块,但它们似乎主要用于(和设计)命名空间处理?
所以问题更多的是Golang风格的接口.
您可以使用 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 Docs:虚拟和抽象类型