使用 Plumatic Schema 生成器从正则表达式生成
Generate from regular expression with Plumatic Schema generators
正则表达式似乎被接受了模式:
(require '[schema.core :as schema])
(schema/validate #"^..$" "hi") ; => "hi"
但模式生成器似乎无法从中生成:
(require '[schema-generators.generators :as gen])
(gen/generate #"^..$")
; 1. Unhandled java.lang.RuntimeException
; You must provide a leaf generator for
; schema.spec.leaf.LeafSpec@3d398cfd
是否可以通过某种方式解决这个问题?
如果我们使用 miner/strgen
库,我们确实可以找到解决方案:
(require '[schema.core :as schema]
'[miner.strgen :as strgen]
'[schema-generators.generators :as gen])
(def two-char #"^..$")
(schema/validate two-char "hi") ; => "hi"
(gen/generate two-char {two-char (strgen/string-generator #"^..$")})
; => "x["
不过应该注意的是,这只为特定的正则表达式 #"^..$"
提供了一个生成器,而不是一般的正则表达式。我们需要一个更好的解决方案,也许可以在某处扩展一些协议。
正则表达式似乎被接受了模式:
(require '[schema.core :as schema])
(schema/validate #"^..$" "hi") ; => "hi"
但模式生成器似乎无法从中生成:
(require '[schema-generators.generators :as gen])
(gen/generate #"^..$")
; 1. Unhandled java.lang.RuntimeException
; You must provide a leaf generator for
; schema.spec.leaf.LeafSpec@3d398cfd
是否可以通过某种方式解决这个问题?
如果我们使用 miner/strgen
库,我们确实可以找到解决方案:
(require '[schema.core :as schema]
'[miner.strgen :as strgen]
'[schema-generators.generators :as gen])
(def two-char #"^..$")
(schema/validate two-char "hi") ; => "hi"
(gen/generate two-char {two-char (strgen/string-generator #"^..$")})
; => "x["
不过应该注意的是,这只为特定的正则表达式 #"^..$"
提供了一个生成器,而不是一般的正则表达式。我们需要一个更好的解决方案,也许可以在某处扩展一些协议。