【发布时间】:2014-05-10 17:31:43
【问题描述】:
我正在 Clojure 中处理 Liberator 项目。我定义了一系列路由,这些路由返回由其他命名空间中的逻辑计算的 JSON 数据。我希望能够以编程方式更改实现逻辑的命名空间,以便可以执行以下操作:
JAVA_OPTS='-DgameLogicNamespace=foo.logic.mock' lein ring server-headless 8080
我目前正在这样做:
(ns foo.routes
(:require [compojure.core :refer :all]
[liberator.core :as lib :refer [defresource request-method-in]]
[liberator.representation :refer [ring-response]]))
(require
(vec
(cons (symbol (System/getProperty "gameLogicNamespace" "foo.logic.real"))
'[:as logic])))
这可行,但感觉有点笨拙。有没有一种惯用的方式来完成我想要的?
我的主要动机之一实际上是使用模拟数据对路由进行单元测试,所以如果有一个很好的解决方案可以仅在测试中提供模拟逻辑(而不是作为 JVM 系统属性),欢迎提出建议。
【问题讨论】:
标签: clojure namespaces