【问题标题】:Implementing interfaces in Erlang在 Erlang 中实现接口
【发布时间】:2011-05-06 09:22:21
【问题描述】:

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

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

这个接口模块在功能方面的表现如何?

【问题讨论】:

  • 你的 Erlang 级别是多少?您是否需要编写模块(导出函数等)、良好实践(一个模块将 API 分组到某个应用程序)或 otp 行为的优缺点方面的一般帮助?
  • 如果您谈论的层是协议栈中的层,您可能会查看stackoverflow.com/questions/4059746/… 但请注意,这是非常具体的要求,似乎比通常的方法更复杂.不幸的是,那里没有太多讨论......或多或少地在自言自语;-)
  • 要给您的问题一个好的答案,可能需要更多信息。界面到底是什么意思?
  • 我的意思是,一个允许模块在较低级别访问模块或进程的接口。架构中的接口到底意味着什么。

标签: interface erlang


【解决方案1】:

Erlang 中最接近的概念是user-defined behaviour。但是,它们往往很少使用。请注意,唯一要检查的是函数的存在性和数量。您无法测试模块是否实际实现了某些行为;您只需调用回调函数,如果模块碰巧“意外”导出具有相同名称的函数,那么您就不走运了。

【讨论】:

  • 不!行为不是接口。它们用于将通用的、行为良好的代码与特定的、有风险的模块(您的代码)分开。它们表示接管您的模块以处理某些任务,而不仅仅是回调的概念。
  • 将我更酸的声音添加到 IGTA 中,请停止尝试将 OOP 概念映射到 Erlang 结构。这是一个糟糕的映射,它会让你对 Erlang 的理解变慢。了解 Erlang 是什么,而不是你想要的。
  • @我给出了非常糟糕的建议。当我开始使用 Erlang 时,我学习了你的 Erlang 课程。干得好 :) Erlang 中不需要接口还是什么意思?谢谢
  • 模块的导出函数提供了自己的 API。可以使用规范和类型 (erlang.org/doc/reference_manual/typespec.html) 给出类型注释,并且 Dialyzer 等工具会选择它们。但除此之外,没有其他工具可以按照您的意思说“这两个模块同意给定的合同”。你只需要在没有它们的情况下工作,这是完全可行的。
  • 行为 =/= 接口,这是肯定的。但是,学习机器学习的学生会注意到一些相似之处。
【解决方案2】:

在 Java 接口或 ML 模块签名意义上的 接口 在动态类型的 Erlang 世界中不存在。您必须在评论中记录行为或提供-spec 合同供透析器查看。

一般来说,接触一门语言的最佳方式是不要假设您可以将现有知识过多地映射到其中,除非您碰巧知道一种在概念上“接近”的语言。接近 Erlang 的语言是 Prolog 和 Scheme。更远的是 Python 和 Ruby,但它们对 OOP 设计的依赖使它们进入了视野。任何静态类型的东西,Ocaml、Haskell、Java、C#、C++ 等等都绝对超出了我们的视野。

【讨论】:

    猜你喜欢
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2018-07-25
    • 2012-02-01
    • 2016-07-03
    • 2012-03-20
    相关资源
    最近更新 更多