gpt4 book ai didi

functional-programming - 组织Clojure代码

转载 作者:行者123 更新时间:2023-12-04 03:24:54 26 4
gpt4 key购买 nike

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

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

它们都共享一个称为generate的通用函数,该函数将它们绘制在屏幕上,因此,如果我使用use,则函数名会冲突。

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

最佳答案

我也开始使用load-file。根据Clojure documentation on libs

Clojure defines conventions for naming and structuring libs:
    * A lib name is a symbol that will typically contain two or more parts separated by periods.
    * A lib's container is a Java resource whose classpath-relative path is derived from the lib name:
        o The path is a string
        o Periods in the lib name are replaced by slashes in the path
        o Hyphens in the lib name are replaced by underscores in the path
        o The path ends with ".clj"
    * A lib begins with an "ns" form that
        o creates the Clojure namespace that shares its name, and
        o declares its dependencies on Java classes, Clojure's core facilities, and/or other libs



Clojure文档进一步提供了以下示例 namespace 声明(我确定您已经知道,但出于完整性考虑,在此提供):
(ns com.my-company.clojure.examples.my-utils
(:import java.util.Date)
(:use [clojure.contrib.def :only (defvar-)])
(:require [clojure.contrib.shell-out :as shell]))

因此,我的答案是在您的项目中使用库-它将帮助简化所有这些文件夹。要“包括”一个库,您将使用require,如下所示:
(require 'clojure.contrib.def 'clojure.contrib.except 'clojure.contrib.sql)
(require '(clojure.contrib def except sql))

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

关于functional-programming - 组织Clojure代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1135168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com