Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
构造Clojure源代码的惯用方法_Clojure_Code Structure - Fatal编程技术网

构造Clojure源代码的惯用方法

构造Clojure源代码的惯用方法,clojure,code-structure,Clojure,Code Structure,我对人们如何构造Clojure源代码感兴趣 对于Java,我非常熟悉每个源代码文件一个类的范例,将所有数据和方法定义与适当的注释和注释捆绑在一起 然而Clojure提供了更多的灵活性,我不确定我应该如何组织我的项目(可能最终成为一个中等规模的应用程序,可能有5000行,带有三个或四个不同的子系统) 特别是,我正在努力解决: 我应该使用什么准则来确定代码是否应该在单个名称空间中,还是应该分离到不同的名称空间中 每个协议/数据类型是否应该有自己的名称空间+带有相关函数集的源文件 我什么时候需要vs

我对人们如何构造Clojure源代码感兴趣

对于Java,我非常熟悉每个源代码文件一个类的范例,将所有数据和方法定义与适当的注释和注释捆绑在一起

然而Clojure提供了更多的灵活性,我不确定我应该如何组织我的项目(可能最终成为一个中等规模的应用程序,可能有5000行,带有三个或四个不同的子系统)

特别是,我正在努力解决:

  • 我应该使用什么准则来确定代码是否应该在单个名称空间中,还是应该分离到不同的名称空间中
  • 每个协议/数据类型是否应该有自己的名称空间+带有相关函数集的源文件
  • 我什么时候需要vs.使用其他名称空间

我也有Java背景,有相当多的Ruby和一点Go。这是我在Clojure一个月后正在做的事情:

  • 我认为名称空间是一个语义单元,它是为特定目的而组合在一起的代码,比如数据类型及其操作
对于名称空间和文件,我有两个约定:

  • 对于适合一个文件的较小单元(我使用~1000行作为文件拆分的限制),每个文件有一个名称空间,目录路径加文件名与名称空间相同。这在Java中是一件好事,我认为,它使从文件中查找名称空间或从文件中查找名称空间变得轻而易举
  • 对于需要几个文件的较大单元,我使用Go约定:名称空间与目录路径匹配,目录中的所有文件共享同一名称空间。在这些情况下,我通常分配一个具有固定名称(“main”)的主文件,以加载其他文件并与之交互
作为一个名称空间示例,我有一个解析器,可以读取格式并将其转换为HTML。我有一个用于解析器的名称空间(语义单元)和目录中的几个文件,这些文件按子功能拆分:Lexer、parser、HTML转换和一个主文件,其中包含用于使用解析器的主要公共API

我不会自动为每个数据类型使用一个名称空间,它取决于数据类型的范围。如果它是一个大的,也许。但对于一个类似数据类型的点,有两个字段和两个函数,我宁愿将其包含到一个更通用的名称空间中,比如几何体

需要与使用:

  • 几乎所有地方都需要使用适当短的别名
  • 这还允许重用核心名称:我的专用树数据类型具有操作“get”以适应映射;使用require没有冲突:“get”是Clojure核心get,“tree/get”是我的数据类型 我只在我认为的“核心扩展”中使用“使用”,就像当我制作自己的“地图IF”时,它是地图和过滤器滚动成一个。

谢谢-这似乎很有道理,很高兴能了解您的观点!