2010-11-07 114 views
9

如何在erlang中实现接口?模块的结构是什么或者它是如何设置的?在Erlang中实现接口

我有一个分层架构,并希望实现每层中的接口。允许需要下层的图层处理某些任务以访问或调用这些任务。

该接口模块如何看待功能?

+0

你的Erlang水平是什么?你需要编写模块(导出的函数等)的一般帮助,好的做法(一个模块分组到一些应用程序的API)或otp行为的利弊? – user425720 2010-11-07 20:53:37

+0

如果你正在谈论的图层是协议栈中的图层,你可以看看http://stackoverflow.com/questions/4059746/how-to-design-a-flexible-erlang-protocol-stack-creation-但是请注意,这是关于非常具体的要求,似乎使得比平时更复杂的方法。不幸的是没有多少讨论在那里......或多或少与我自己交谈;-) – 2010-11-08 10:30:15

+0

为了给你的问题提供一个很好的答案,可能需要更多的信息。你的界面究竟是什么意思? – 2010-11-08 10:31:45

回答

3

一个接口意义上的Java接口或ML模块签名不存在于动态类型的Erlang世界中。您必须在评论中记录行为或为透析器提供规格合约才能查看。

一般来说,接近某种语言的最佳方法是不要假设您可以将现有知识过多映射到语言中,除非您碰巧知道概念中“接近”的语言。接近Erlang的语言是Prolog和Scheme。更远的地方是Python和Ruby,但他们对OOP设计的依赖使得它们成为了地平线。任何静态类型的东西,Ocaml,Haskell,Java,C#,C++等绝对是超越地平线的。

-2

Erlang最接近的概念是user-defined behaviour。但是,它们往往很少使用。请注意,唯一被检查的是函数的存在和形式。你不能测试模块实际实现了一些行为;你只需调用回调函数,并且如果模块碰巧“出乎意料”地导出了具有相同名称的函数,那么你运气不好。

+7

不!行为不是接口。它们用于将通用,行为良好的代码与特定的,有风险的模块(代码)分开。它们表示一个模块接管你的一些任务的处理,而不仅仅是回调的概念。 – 2010-11-08 03:20:42

+1

为IGTA添加更多酸性的声音,请停止尝试将OOP概念映射到Erlang构造。这是一个错误的映射,它会让你对Erlang的理解变慢。了解Erlang **是什么**,而不是你想要的。 – 2010-11-08 03:26:54

+0

@我提供可怕的建议。当我开始使用Erlang时,我经历了你的Erlang课程。不错的工作:)在Erlang中不需要接口,或者你是什么意思?谢谢 – jarryd 2010-11-08 10:21:26