Opa:模块和包之间有什么区别?

时间:2012-06-06 11:50:14

标签: opa

我读过Opa documentation,但我没有发现模块和包之间的区别,以及模块或包如何链接到Opa应用程序的源布局。

有人能提供关于如何以及何时使用模块与包裹的明智例子吗?

3 个答案:

答案 0 :(得分:2)

您可以将应用程序的某些部分隔离到不同的packages。 例如,您可以创建3个包:模型,视图和控制器。 只需在属于模型包的源文件的开头定义示例package myApp.model

然后,如果您的某个视图文件需要该模型,只需在文件开头添加import myApp.model即可。

您可以使用单个conf文件,而不是在源文件中编写packageimport

myApp.controller:
    import myApp.view
    src/controller.opa

myApp.view:
    import myApp.model
    src/view.opa

myApp.model:
    src/model.opa

然后使用--conf编译选项。

模块

模块以这种方式定义

module MyModule {
   function f(){ void }
}

您可以使用MyModule.f()

访问模块功能

包内的模块

因此,如果您的软件包model中定义了模块MyModule,并且您想从外部访问它,那么您将写:

import myApp.model
MyModule.f()

更新:阅读下面的消息,它们提供了其他有用的信息。

答案 1 :(得分:2)

只是为了补充Cedrics的回答:

包是一个基本的编译单元。如果包或它依赖的任何包都发生了变化,那么就不需要重新编译它。对于较小的项目,可以不使用包,这相当于将所有内容放在一个包中。对于较大的项目,您通常希望将项目拆分为多个包,以便从单独的编译中受益。

模块主要为相关定义提供命名空间。您可以在一个包中包含多个模块。

Opa不会施加任何文件名限制。您可以在一个文件中包含多个模块,并且它们的名称与文件名无关。包名称与源目录树中文件位置之间也没有强加关系(虽然使用约定在这里确实有意义)。显然,一个文件属于一个包。

答案 2 :(得分:0)

基本上,包总是用于包含在另一个文件中定义的值和函数。 (除了那些在标准库中定义的那些。)因此,它可以将代码部分彼此分开,或者换句话说,将代码编码成不同的部分。他们的使用方式已在Cédrics答案中解释。包不提供抽象,因为完整的代码总是包含在import中。

另一方面,模块提供抽象。使用模块,可以定义仅在内部模块中使用的值和函数,而不是从外部可见。这使得可以将部分实现隐藏到模块的用户,并向外部提供定义良好的接口。这个概念可以更容易地更改特定的实现部分,而不会破坏使用模块的代码。这是程序设计中非常重要的概念。