Syntax 什么是Jepsen上下文中的扩展协议?
我是clojure的新手,我正在尝试弄清楚Jepsen做什么,一个用来检查分布式系统一致性的软件 我的问题是: 扩展协议做什么? 更具体地说,在协议中什么是op。 在上下文中是什么意思 问候 扩展协议做什么 协议是一种抽象的东西,看起来像Java中的接口。它什么也不做,但其他一些实体可能会实现它。在Java中,您声明了一个实现接口的类。在Clojure中,您扩展了 具有自定义类型的特定协议,该自定义类型声明为使用deftype或defrecord调用扩展协议 使用类型扩展协议时,需要为该协议中提到的签名指定实现 一个很好的例子可能是JSON序列化。比如,协议如下所示:Syntax 什么是Jepsen上下文中的扩展协议?,syntax,clojure,jepsen,Syntax,Clojure,Jepsen,我是clojure的新手,我正在尝试弄清楚Jepsen做什么,一个用来检查分布式系统一致性的软件 我的问题是: 扩展协议做什么? 更具体地说,在协议中什么是op。 在上下文中是什么意思 问候 扩展协议做什么 协议是一种抽象的东西,看起来像Java中的接口。它什么也不做,但其他一些实体可能会实现它。在Java中,您声明了一个实现接口的类。在Clojure中,您扩展了 具有自定义类型的特定协议,该自定义类型声明为使用deftype或defrecord调用扩展协议 使用类型扩展协议时,需要为该协议中提
(defprotocol JSON
(to-json [obj]))
如果您调用json。。。在任何值上,都会出现一个错误,表示该类型没有json实现。您需要扩展它:
(extend-protocol JSON
Integer
(to-json [obj] (str obj))
Boolean
(to-json [obj]
(if obj "true" "false")))
现在,调用json 42和json false将起作用。您可以将该协议扩展到其他类型:浮点、数组、映射等
协议中的op是什么
协议没有实现,只有签名。os是某个函数的签名,它只接受三个参数:[gen test process]。这取决于它应该返回什么。例如,您可以参考clojure.lang.AFunction类型的行为实现位置。因为我对吉普森不熟悉,我不能再多说了
混合在上下文中是什么意思
我认为它的docstring和代码一样清晰。我收集了一批氏族。如果为空,则结果将是一个名为void的特殊生成器实例。这是一种匿名类型,它扩展了生成器协议,在调用op时不进行任何计算,只返回nil
如果gens不为空,则代码返回一个生成器类型的实例,该实例具有这样的op实现,在执行op时随机生成一个gen
希望这会有所帮助