gpt4 book ai didi

java - 在 Erlang 中使用 Dialyzer 的行为来模拟接口(interface)

转载 作者:行者123 更新时间:2023-12-01 23:09:01 25 4
gpt4 key购买 nike

我想要 Erlang 中等效的 Java 接口(interface)。如何为透析器提供 -spec 合约,使我能够尽可能接近 Java 中提供的功能?

假设我想要与此等效的东西:

//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);
}

最佳答案

您可以使用 -callback 来实现此目的属性:

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

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

然后每当你想提供这个接口(interface)时:

-behavior(sport).

但是,我目前无法想到一种在行为之间进行继承的方法。您可以使用包含相关 -behaviour 属性的 .hrl 文件来模拟它,而不是逐字指定它们,但这感觉很脏。

如果行为模块与使用它们的模块一起分析或已经在 PLT 中,那么 Dialyzer 将检查回调是否满足指定的-specs

关于java - 在 Erlang 中使用 Dialyzer 的行为来模拟接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22310895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com