2017-01-21 5 views
1

Crystalプログラミング言語でインターフェイスの概念を使用する可能性はありますか?Crystal in interface

モジュールは近づいていますが、名前空間の処理には主に使用されているようです。

したがって、質問は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

関連する問題