2017-01-21 6 views
1

Есть ли возможность использовать концепцию интерфейсов на языке программирования Crystal?интерфейсов в Crystal

Что происходит рядом с модулями, но кажется, что они в основном используются (и предназначены) для обработки пространства имен?

Итак, вопрос идет о направлении интерфейсов Golang.

ответ

3

Модули используются для создания иерархии пространства имен, но это не то, что они используются для в первую очередь (вложенные классы и создать иерархию).

Модули предназначены для микширования, чтобы сгруппировать методы, реализация которых может использоваться в разных классах (или модулях). Модули также могут содержать абстрактные методы, реализация которых специфична.

Модули явно включены в классы, и вы можете ограничить типы имени модуля, поэтому они действуют как интерфейс.

Чистый интерфейс возможен, если вы создадите модуль, который имеет только абстрактные методы.

+1

Для получения более подробной информации и примеров см. Ниже: https://github.com/crystal-lang/crystal/issues/3489 –

5

Вы можете использовать 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: Virtual and Abstract Types

 Смежные вопросы

  • Нет связанных вопросов^_^