как использовать плюматическую схему для определения функции, которая принимает аргумент, который может быть 2 или более разных типов? - PullRequest
1 голос
/ 31 мая 2019

Я не могу понять, как использовать s / либо или s / условные как часть списка ввода. Хотел бы сделать что-то вроде этого:

(s/defn parse-int :- s/Int
  [input :- ; either s/Int or s/Str]
    ; if s/Int
    input
    ; if s/Str
    (read-string input)
))

1 Ответ

2 голосов
/ 31 мая 2019
(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, но это устарело.

...