Я не могу понять, как использовать s/ether или s/conditional как часть списка ввода. Хотел бы сделать что-то вроде этого:
(s/defn parse-int :- s/Int
[input :- ; either s/Int or s/Str]
; if s/Int
input
; if s/Str
(read-string input)
))
(sc/defn parse-int :- sc/Str
[input :- (sc/cond-pre sc/Int sc/Str)]
(if (string? input) "a string" "not a string"))
(parse-int 34545) ; "not a string"
(parse-int "34545") ; "a string"
Вы также можете использовать either
, но это устарело.
Есть отличная беседа о схеме Арии Хагиги.
о, хорошо, я не знал, что после
:-
можно назвать fn