为 Clojure 协议提供多种实现

2024-03-09

我有一个公开常见数据相关函数的命名空间(get-images, insert-user)。然后,我有两个具有相同功能并以不同方式实现它们的数据库后端。他们按原样实现接口。每个后端都包含在一个命名空间中。

我似乎无法找到如何完成此任务的良好解决方案。

我尝试动态加载ns但没有运气。一旦你这样做了(:require [abc :as x]), the x不是真正的值。

我尝试使用defprotocol and deftype但这很奇怪,因为deftype也需要进口,这让我的一切都变得混乱。

有一些惯用的解决方案吗?


我不明白为什么协议还不够?

在 ns data.api 中:

(ns data.api)
(defprotocol DB
  (get-images [this]) 
  (insert-user [this]))

在 ns data.impl1 中:

(ns data.impl1
  (:require [data.api :refer :all]))

(defrecord Database1 [connection-params]
  DB
  (get-images [_] ...)
  (insert-user [_] ...))

ns data.impl2 中也有同样的事情。

然后,当您要使用特定数据库时,只需创建正确的记录:

(ns data.user
  (:require [data.api :refer :all])
            [data.impl1 :refer (->Database1)])

(defn use-db []
  (let [db1 (->Database1 {})]
    (get-images db1)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 Clojure 协议提供多种实现 的相关文章

  • 我从 clojure 和 python 中得到的 hmac 签名略有不同

    我从 python 实现和 clojure 实现中获得的 HMAC SHA1 签名略有不同 我很困惑什么会导致这种情况 Python实现 import hashlib import hmac print hmac new my key my
  • 如何应用Clojure? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习 Clojure 我真的很喜欢它的一些功能 是时候考虑一 些真正的 宠物项目 了 我意识到我不知道如何真正做到这一点use克
  • Clojure 宏:从地图创建本地变量 [重复]

    这个问题在这里已经有答案了 我有这个示例代码 我通过迭代映射的键值对来创建变量 defmacro block bindings body let mapcat fn k v if symbol k k symbol name k v bin
  • Emacs/Swank/Paredit for Clojure 的温和教程

    我要转向 Emacs 来工作Clojure http en wikipedia org wiki Clojure Lisp 为了能够执行以下操作 我需要在 Emacs 上设置哪些信息 自动匹配 生成相应的右括号 自动缩进 Lisp Cloj
  • 在 Clojure 中退出 Recur 循环

    我想跳出下面的循环 并在第 10 行计算结果为 true 时返回最佳最小移动 我查看了 print 语句的输出 当第 10 行的计算结果为 true 时 它 找到了我正在查找的数据 但仍然重复出现 在 Clojure 中 有没有办法在语句计
  • Scala - Java = ? (或者 Clojure - Java = ?)

    开发人员可以在不懂 Java 的情况下使用 Scala 吗 开发人员可以在不懂 Java 的情况下使用 Clojure 吗 注意 例如 我是一名 C 开发人员 我在不了解任何 VB 的情况下使用 NET 当然 WF 4 0 使用 VB 进行
  • 什么是 fn* 以及 Clojure 如何引导?

    The Clojure core 的来源 https github com clojure clojure blob master src clj clojure core clj似乎假设预先存在fn 这是在哪里定义的 引导程序还需要什么
  • 改进迭代文本解析的 clojure lazy-seq 使用

    我正在编写一个 Clojure 实现这次编码挑战 http biostar stackexchange com questions 1759 code golf mean length of fasta sequences 尝试找出 Fas
  • Clojure def 与 defn 对于没有参数的函数

    我用 clojure 编写了一个程序 但有些函数没有参数 将此类函数编码为 def 而不是不带参数的 defn 有什么优点 def t0 System currentTimeMillis defn t1 System currentTime
  • 设置、让、宏、坚果

    我正在尝试从 html 内容构建一个快速目录 为了简短起见 代码非常简单 defn toc content doseq i take 5 iterate inc 1 let h str h i println content h where
  • 有没有好的 Clojure 基准测试?

    Edit Clojure 基准测试已达到基准游戏 http benchmarksgame alioth debian org u64q clojure html 我已经制作了这个问题社区维基并邀请其他人保持更新 有人知道 Clojure 性
  • 我可以让 lein cloverage 跳过特定测试吗?

    我正在进行一个 Leiningen 项目 其集成测试注释如下 deftest manual test v3 preview preview client http localhost 10313 v3 preview 当我这样做时 这些测试
  • 如何使用 Clojure 在命令行中更改目录?

    我正在寻找的是 Windows 命令行中的这种命令行交互 C temp1 gt clj some script clj C temp2 gt 其中 some script clj 包含类似以下内容 cd c temp2 那么问题来了 如何实
  • 如何使用clojure中的map函数打印哈希映射列表的每个元素?

    我正在构建一个哈希映射列表 然后将其传递给另一个函数 当我尝试使用打印列表中的每个哈希映射时map它不工作 我可以打印完整列表或获取第一个元素等 defn m a println a map println a 以下仅适用于 repl m
  • 与doseq(或for)并行遍历集合的有效方法?

    doseq e coll1 myfunc e 如果您只关心副作用 那么速度非常快 如果我想要怎么办myfunc 并行 地从多个集合中获取元素 即 applymyfunc到每个集合的第一个元素 然后到所有第二个元素 然后到所有第三个元素 依此
  • Clojure 缩减函数的目的

    clojure 的目的是什么reduced函数 在 Clojure 1 5 中添加 https clojure github io clojure clojure core api html clojure core reduced htt
  • 如何在 Compojure 中使用 lib-noir 有状态会话

    我想我这里有一个相当简单的问题 但我已经看这个屏幕太久了 所以我正在尝试 但失败了 让有状态会话在 Compojure 中工作 refheap代码粘贴is here https www refheap com paste 11161 你可以
  • 如何在 repl 中加载新的 clojure 库

    所以我有这个工作流程问题 我很高兴在我的 clojure 项目 repl 上打字 并意识到我需要另一个不在我的库中的库project clj 在这种情况下 我需要tools cli图书馆 我打开project clj在我的编辑器中添加一个条
  • 在 Android 上运行 Java 字节码 - DalvikVM 之上的 Sun JVM

    由于 java 实现 OpenJDK 和Android的虚拟机DalvikVM是开源的 因此必须可以在Google的DalvikVM之上实现Sun的JavaVM 这将使运行基于 JVM 的应用程序和语言成为可能 Clojure Jython
  • 惰性序列内部究竟如何工作

    我是 clojure 的新手 不清楚惰性序列在内部是如何工作的 或者更具体地说 返回惰性序列的函数意味着只有在需要时才会计算结果 例如在下面的例子中 defn fc lazy fn xs lazy seq if let xss seq xs

随机推荐

  • 验证 Azure Active Directory 中的用户;不使用 SSO,但使用用户名和密码

    随着最近发布的 Azure AD 我们希望使用 Azure AD 进行 Web 应用程序身份验证 但不想使用 SSO 我们不希望用户被重定向到 Microsoft 帐户登录屏幕 然后再返回 我们希望向他们提供登录凭据屏幕 在其中捕获他们的用
  • 如何在 Java GUI 上添加多行标签?

    我做了一个java swing GUI 现在我想在其上显示一条静态消息 但该消息是多行的 而 JLabel 是单行的 我怎样才能显示该消息 我们可以设置 JLabel 的任何属性来显示多行消息吗 我是否必须对多行使用多个 JLabel 还有
  • 词典排序

    我正在做一个问题 说 连接单词以生成字典顺序最低的可能字符串 来自一场比赛 以这个字符串为例 jibw ji jp bw jibw 实际输出结果是 bw jibw jibw ji jp 当我对此进行排序时 我得到 bw ji jibw ji
  • Java 类加载器和依赖解析

    有人可以澄清一下 类加载器的作用不仅是加载单个类 而且还加载其依赖项吗 如果是这样 整个过程到底需要什么 如果可能的话 我正在寻找实施细节 例如 在某些时候 必须从某个地方 网络或文件系统位置 读取字节 并且必须根据类规范名称和类的预知来计
  • Hyperledger Fabric 中的多个智能合约

    如何在 Hyperledger Fabric 的同一个应用程序中实施多个智能合约 哪个配置文件包含实现此目的的设置 我将使用 Hyperledger Fabric 版本 1 4 中的 Fabcar 示例来回答您的问题 我的回答是基于 Jav
  • OPC 新手指南:如何编写 C# Hello World 客户端?

    这是我的情况 我们开发了一款用于监控太阳能发电厂的软件 我必须介绍 OPC 作为一种从物理设备本身获取数据的新方法 这就是为什么我最终尝试了解 OPC 但迄今为止这令人沮丧 我已经安装了 Matrikon 模拟器 并使用 Matrikon
  • Jquery - 将html字符串附加到变量中的html字符串

    我正在尝试创建一个 HTML 字符串 然后使用额外的 HTML 和属性修改该 HTML 字符串 但它不起作用 我究竟做错了什么 document ready function body on click button function va
  • 将激活上下文 API 与不同位置的许多 dll 一起使用

    我在位置 A 运行的 Net 客户端中使用激活上下文 API 在 WS2008 上的位置 B 与 A 完全不同的位置 不是同一台计算机上的同级 后代等 加载 COM 组件 无需注册通过在 ACTCTX 中传递位置 B 它工作正常 但是 我现
  • 主线程执行完成后,Spring Batch 线程不返回

    我是春季批次的新手 我已经通过使用多个线程从 spring 创建并成功执行了作业 它工作得很好 除了程序执行完成时 程序流不会结束 停止 即 即使主方法的最后一条语句被执行 程序也不会退出 我不确定它是否继续等待线程完成或什么 有人可以就此
  • 不使用 Excel 写入 Excel 电子表格中的某些单元格?

    我想在未安装 Excel 的服务器上写入 Excel 电子表格 所以Excel自动化是不可能的 我还需要写信给certain使用 NET 的单元 这可能吗 如何实现 ODBC 驱动程序可用于在某些工作表单元格插入数据吗 无需使用昂贵的第三方
  • Assert.That 与 Assert.True

    更喜欢什么 Assert That obj Foo Is EqualTo true or Assert True obj Foo 对我来说 这两种资产是等价的 应该优先选择哪一种 在这种特殊情况下 没有区别 您将看到大致相同详细程度的输出
  • IntelliJ IDEA 中的“变量从未分配”警告只能“部分”抑制

    Java EE IntelliJ Idea 2016 3 我编写了一个类并声明了一个私有字段 Inject注解 我已经通过添加成功地从 检查结果 窗口中删除了 未使用的声明 通知javax inject Inject to 设置 gt 编辑
  • grunt-contrib-connect 中间件 CORS 解决方案,具有 keepalive true

    对于我的本地开发系统 我尝试使用 grunt contrib connect 为前端资产提供服务 我需要一个在 Firefox 中使用字体的跨域解决方案 服务器运行得很好 但我似乎无法设置标头 我正在使用 grunt contrib con
  • 单个元素中的多个文本节点?

    有人可以帮我看一下下面的屏幕截图并解释以下内容 到底是怎么回事 我如何以编程方式检测它 我如何以编程方式修复 摆脱它 我相信发生的事情是我在一个单一的文本节点中有多个文本节点preelement 我感觉很多年前我在MDN上读到这样的事情是可
  • android:dither="true" 不抖动,出了什么问题?

    我一直在尝试让 android 抖动活动的背景图像 到目前为止没有成功 我不知道出了什么问题 这就是我所做的 我的活动布局的根元素是 LinearLayout
  • 为什么自定义类型接受 Python 中的临时属性(而内置类型不接受)?

    我想知道为什么人们能够为自定义类型的实例创建一个新属性 新 意味着 先前未在类主体中定义 但无法为内置类型执行相同的操作在类型上 比如object本身 代码示例 gt gt gt class SomeClass object pass gt
  • Python导入模块错误

    我在项目中导入模块时遇到问题 我正在创建测试 但无法从测试文件导入我的 main 来测试应用程序的一个端点teste ex py 这是我的项目结构 backend api api init py main py testes init py
  • 如何在django模板中使用生成器方法?

    我想在 django 模板中使用 python 生成器 可以吗 例如 我有模型 它包含生成器对象 如下所示 class TestMe models Model property def gen self yield 1 yield 2 上下
  • Pycharm不显示数据库表

    更新PyCharm 版本2017 1 后 PyCharm不显示sqlite3数据库表不再存在 我已经测试了连接并且可以正常工作 In sqlite客户端我可以列出所有表并进行查询 其他人也遇到这个问题吗 在这种情况下无论如何都能解决吗 我使
  • 为 Clojure 协议提供多种实现

    我有一个公开常见数据相关函数的命名空间 get images insert user 然后 我有两个具有相同功能并以不同方式实现它们的数据库后端 他们按原样实现接口 每个后端都包含在一个命名空间中 我似乎无法找到如何完成此任务的良好解决方案