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
Syntax 什么是Jepsen上下文中的扩展协议?_Syntax_Clojure_Jepsen - Fatal编程技术网

Syntax 什么是Jepsen上下文中的扩展协议?

Syntax 什么是Jepsen上下文中的扩展协议?,syntax,clojure,jepsen,Syntax,Clojure,Jepsen,我是clojure的新手,我正在尝试弄清楚Jepsen做什么,一个用来检查分布式系统一致性的软件 我的问题是: 扩展协议做什么? 更具体地说,在协议中什么是op。 在上下文中是什么意思 问候 扩展协议做什么 协议是一种抽象的东西,看起来像Java中的接口。它什么也不做,但其他一些实体可能会实现它。在Java中,您声明了一个实现接口的类。在Clojure中,您扩展了 具有自定义类型的特定协议,该自定义类型声明为使用deftype或defrecord调用扩展协议 使用类型扩展协议时,需要为该协议中提

我是clojure的新手,我正在尝试弄清楚Jepsen做什么,一个用来检查分布式系统一致性的软件

我的问题是: 扩展协议做什么? 更具体地说,在协议中什么是op。 在上下文中是什么意思 问候

扩展协议做什么

协议是一种抽象的东西,看起来像Java中的接口。它什么也不做,但其他一些实体可能会实现它。在Java中,您声明了一个实现接口的类。在Clojure中,您扩展了 具有自定义类型的特定协议,该自定义类型声明为使用deftype或defrecord调用扩展协议

使用类型扩展协议时,需要为该协议中提到的签名指定实现

一个很好的例子可能是JSON序列化。比如,协议如下所示:

(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

希望这会有所帮助