8

YARDを使用すると、メソッドパラメータと戻り値のタイプを指定できます。私は本当にダックタイピングが好きなので、YARDがサポートしなければならないメソッドを指定することでタイプの定義もサポートしているのを見るのはうれしいです。

ご覧のとおり、次のような表現

#first_method、#second_method
論理和として解釈されます。これは、オブジェクトが#first_methodまたは#second_method、あるいはその両方をサポートする必要があることを意味します。これは私が必要としているものではありません。

パラメータの#first_methodと#second_methodの両方をサポートするためにオブジェクトが必要であることを指定できるようにしたいと思います。これを指定する方法はありますか?

4

1 に答える 1

9

複合ダックタイプのインターフェイスを指定するための慣用的な構文はありません。とはいえ、すべての型の仕様は実際には単なる自由形式のテキストであることに注意してください。質問で与えられたYARDタイプのパーサーリンクは、一般的なインターフェイスを指定するための従来の構文または慣用的な構文のセットにすぎません。これらのタイプを指定するための賢い方法を考えている場合(そしてそれがユーザーにとって理にかなっている場合)、自由に指定できます。おそらく、のようなもの#first#secondが機能するかもしれません、または#first&#second

ただし、このアドホックインターフェイスをラップする具体的なタイプを作成することをお勧めします。ランタイムで実際に型を使用しない場合でも、ユーザーにインターフェースを説明するためのドメイン内のオブジェクトとして機能します。たとえばclass Foo、2つのメソッド#first#second、を使用してを作成し、それらの2つのメソッドを文書化することFooで、タイプとして使用できるようになります。Fooクラスのドキュメントで、実際にはコードで使用されることはなく、「インターフェイス」として存在するだけであると説明できます。また、Fooを「モジュール」にして、具体的なタイプというよりも「インターフェース」(または、その言語が必要な場合は「プロトコル」)であることを示すこともできます。

于 2012-02-03T10:39:12.047 に答える