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
Functional programming 组织Clojure代码_Functional Programming_Clojure - Fatal编程技术网

Functional programming 组织Clojure代码

Functional programming 组织Clojure代码,functional-programming,clojure,Functional Programming,Clojure,我有一个在图像上绘制形状的程序。我对每个形状都有一个单独的名称空间,它们位于单独的文件中 com/name/box.clj-->具有com.name.box命名空间。 com/name/triangle.clj-->具有com.name.triangle命名空间 它们都共享一个名为generate的公共函数,该函数在屏幕上绘制它们,所以如果我使用use,函数名会发生冲突 现在,我用load file加载它们。有更好的方法吗?查看Clojure API,似乎有多种包含文件的方法。对于包含大量文件的

我有一个在图像上绘制形状的程序。我对每个形状都有一个单独的名称空间,它们位于单独的文件中


com/name/box.clj-->具有com.name.box命名空间。
com/name/triangle.clj-->具有com.name.triangle命名空间

它们都共享一个名为generate的公共函数,该函数在屏幕上绘制它们,所以如果我使用
use
,函数名会发生冲突


现在,我用
load file
加载它们。有更好的方法吗?查看Clojure API,似乎有多种包含文件的方法。对于包含大量文件的项目,哪一个是更好的选择?

我也是从使用
加载文件开始的。据报道,

Clojure定义了命名和构造库的约定:
*库名称是一种符号,通常包含两个或多个由句点分隔的部分。
*库的容器是一种Java资源,其类路径相对路径派生自库名称:
o路径是一个字符串
o库名称中的句点替换为路径中的斜杠
o库名称中的连字符替换为路径中的下划线
o路径以“.clj”结束
*lib以“ns”形式开始,该形式为
o创建共享其名称的Clojure命名空间,
o声明其对Java类、Clojure的核心功能和/或其他LIB的依赖关系

Clojure文档进一步提供了以下示例名称空间声明(我相信您已经知道了,但我在这里提供它是为了完整性):

所以,我的答案是在你的项目中使用libs——这将有助于简化所有这些文件夹。要“包含”库,您将使用require,如下所示:

(require 'clojure.contrib.def 'clojure.contrib.except 'clojure.contrib.sql)
(require '(clojure.contrib def except sql))

只要文档是正确的,并且您的项目是类路径相关的,就应该愉快地加载所有内容。希望这能回答你的问题D

同时使用名称空间libs(正如已经建议的那样)也许您常用的“generate”函数是多重方法的候选者

这将有助于避免函数名冲突,并为“形状”添加一个公共抽象,我想这取决于是否能找到合适的分派函数

(require 'clojure.contrib.def 'clojure.contrib.except 'clojure.contrib.sql)
(require '(clojure.contrib def except sql))