【发布时间】:2017-06-27 23:46:48
【问题描述】:
Clojure 官方规范文档指出:
大多数用于指定结构的系统都将 键集(例如地图中的键,对象中的字段)与 这些键指定的值的规范。 IE。在这样的 接近地图的模式可能会说:a-key's type is x-type and :b-key 的类型是 y-type。这是僵硬的主要来源 冗余。
在这个 SO 问题中:clojure.spec human readable shape?
给出下面的例子:
(s/def ::car (s/keys :req [::tires ::chassis]))
(s/def ::tires (s/coll-of ::tire :count 4))
(s/def ::tire (s/or :goodyear ::goodyear}
:michelin ::michelin))
我的问题是:这怎么不是很简单,也不是多余的?与此相反,什么是(在 Java 中?)僵化和冗余的例子?
在我看来,你仍然不能定义一辆有 6 个轮子的赛车,因为::tires 必须有 4 个元素。您也不能定义后轮是螺旋桨的浮动汽车。
从刚性和冗余的角度来看,上述示例与静态类型有何不同?这与使用包含四个 tire 实例的 tires 实例构建的 Java car 类有什么不同?
基本上,我认为我没有得到的是您通过告诉需要哪些键来指定地图。到现在为止还挺好。但是键是自己指定的,所以这些键指定的值也没有指定!?这里的事情如何“没有混淆”?
【问题讨论】: