Stworzyłem funkcję, aby sprawdzić, czy mój pierwszy ciąg kończy się z drugim ciągiem.Sprawdzanie, czy łańcuch kończy się danym ciągiem w clojure
W Javie mamy gotowego sposobu na sprawdzenie tego, ale w Clojure nie udało mi się znaleźć takiego sposobu więc pisemną funkcji niestandardowej następująco:
(defn endWithFun [arg1 arg2]
(= (subs arg1 (- (count arg1) (count arg2)) (count arg1)) arg2))
Wyjścia:
> (endWithFun "swapnil" "nil")
true
> (endWithFun "swapnil" "nilu")
false
ten działa zgodnie z oczekiwaniami.
Chcę wiedzieć, czy istnieje podobna alternatywa? Również w moim przypadku porównuję wielkość liter. Chcę również ignorować wielkość liter.
Dziękuję, właśnie tego szukałem. teraz widzę, że mogę używać apletu java klasy 'String' przy użyciu' (.) ', próbowałem' (subs "swapbil" 1 4) 'i' (. "swapnil" substring 1 4) 'both gives ans * * wap **, czy jest jakaś degradacja wydajności, jeśli używam java w clojure? albo oba będą miały taką samą wydajność. – swapy
Wyobrażam sobie, że wydajność powinna być porównywalna. Jeśli martwisz się, możesz zbudować szybki mikro-benchmark. –
Ogólnie rzecz biorąc jedyną karą za wydajność, z jaką można korzystać w Javie w Clojure, jest użycie refleksji, aby wyszukać metodę w środowisku wykonawczym, jeśli nie można wywnioskować klasy obiektu podczas kompilacji. Funkcja 'clojure.string' działa we wszystkich typach wskazówek, aby uniknąć refleksji, więc powinna istnieć pomijalna różnica w wydajności między wersjami Clojure i Java. – Alex