0

Erlang で同等の Java インターフェイスが必要です。-specJava で提供される機能にできるだけ近づけるために、ダイアライザーのコントラクトを提供するにはどうすればよいですか?

これと同等のものが欲しいとしましょう:

//Filename: Sports.java
public interface Sports
{
   public void setHomeTeam(String name);
   public void setVisitingTeam(String name);
}

//Filename: Football.java
public interface Football extends Sports
{
   public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);
}

//Filename: Hockey.java
public interface Hockey extends Sports
{
   public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);
}
4

1 に答える 1

3

-callback属性を使用してこれを実装できます。

%% Filename: sport.erl
-module(sport).

-callback setHomeTeam(Name :: string()) -> ok.
-callback setVisitingTeam(Name :: string()) -> ok.

次に、このインターフェースを提供したいときはいつでも:

-behavior(sport).

ただし、現在、動作間の継承を行う方法を考えることはできません。-behaviourそれらを逐語的に指定する代わりに、関連する属性を含む含まれている .hrl ファイルを使用してエミュレートできますが、これは汚いと感じます。

Dialyzer は-specs、動作モジュールがそれらを使用するモジュールまたは既に PLT にあるモジュールと一緒に分析される場合、コールバックが指定を満たしていることを確認します。

于 2014-03-11T08:28:39.817 に答える