Próbuję użyć protokołów, aby utworzyć typ numeru inżynieryjnego ("numer"), więc mogę powiedzieć, że (+ "1k" "2Meg")
i uzyskać coś w rodzaju "2.001Meg"
. Powinienem być w stanie uzyskać wartość zmiennoprzecinkową z numeracji, tak jak (:val my-knumber)
, ale zwykle drukarka powinna wyświetlać ciąg znaków, który jest również dostępny tak, jak to jest (:string my-knumber)
. Ta liczba będzie obsługiwać wszystkie zwykłe przyrostki p, n, u, m, k, Meg, G i konwertować zgodnie z wymaganiami, na przykład (/ "1Meg" "1G") -> "1m")
. Chcę móc przekazać to do dowolnej funkcji, która oczekuje liczby.Jak rozszerzyć protokoły numeryczne w Clojure
Czy ktoś może zaproponować strategię? Myślę, że muszę korzystać z protokołów. Obecnie mam (defrecord knumber [val string])
, ale nie jestem pewien, co dalej.
Jakie protokoły spełniają numery clojure? Myślę, że muszę rozszerzyć niektóre istniejące protokoły/interfejsy do tego.
Dzięki
Wiem, że to nie to samo, ale możesz użyć notacji naukowej: (/ 1e6 1e9) – DaoWen