Size: a a a

Clojure — русскоговорящее сообщество

2020 September 17

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
done
(defn parseInt [^String s]
 #?(:clj  (Integer/parseInt s)
    :cljs (js/parseInt s)))


(defn try-parse-int [s]
 (some->> s str (re-matches #"[-+]?\d+") parseInt))
для clj оптимально что-то вроде
(defn try-parse-int [x] 
 (try
   (cond (string? x) (Integer/parseInt x)
         (integer? x) x)
   (catch Throwable _)))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
для clj оптимально что-то вроде
(defn try-parse-int [x] 
 (try
   (cond (string? x) (Integer/parseInt x)
         (integer? x) x)
   (catch Throwable _)))
  (try-parse-int 10) ; 5 ns
 (try-parse-int "10") ; 20 ns
 (try-parse-int {}) ; 2 ns
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
  (try-parse-int 10) ; 5 ns
 (try-parse-int "10") ; 20 ns
 (try-parse-int {}) ; 2 ns
(try-parse-int "abc") ; 4 µs 😞
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
а вот интересно, что должно возвращать (try-parse-int "15.0")
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
а вот интересно, что должно возвращать (try-parse-int "15.0")
и почему 😊
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
и почему 😊
nil. Целое число не спаршен. В моём понимании строка должна полностью быть целым числом. От начала до конца
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Чтобы никаких
parseInt("Infinity", 20) => 18
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
nil. Целое число не спаршен. В моём понимании строка должна полностью быть целым числом. От начала до конца
1e5 целое число? 😊
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
В результате число без дробной части, т.е. целое, но тип это флоат
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
вот бы (range 1e5) был такой же строгий 😊
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
nil. Целое число не спаршен. В моём понимании строка должна полностью быть целым числом. От начала до конца
ну вот когда (int 15.0) работает, то не всё так однозначно...
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
ну вот когда (int 15.0) работает, то не всё так однозначно...
Это же каст к инту
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Если я захочу себе такую парсилку, я сделаю parseNumber и затем скастую куда надо
источник

a

alex in Clojure — русскоговорящее сообщество
Sergey Trofimov
для clj оптимально что-то вроде
(defn try-parse-int [x] 
 (try
   (cond (string? x) (Integer/parseInt x)
         (integer? x) x)
   (catch Throwable _)))
А чем тестировал?
эксепшены же вроде приводят к деоптимизации JIT кода. Если мы совсем упарываемся)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
alex
А чем тестировал?
эксепшены же вроде приводят к деоптимизации JIT кода. Если мы совсем упарываемся)
criterium
источник

a

alex in Clojure — русскоговорящее сообщество
спасибо
видел вроде в кложуре обертки над JMH, или тут он тоже?
источник

AB

Alex Bubnov in Clojure — русскоговорящее сообщество
я правильно понимаю, что несмотря на название основного конструктора c.l.Symbol.intern, символы реально не интернятся в отличие от кейвордов?
источник

a

alex in Clojure — русскоговорящее сообщество
почему?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Alex Bubnov
я правильно понимаю, что несмотря на название основного конструктора c.l.Symbol.intern, символы реально не интернятся в отличие от кейвордов?
правильно
но есть отдельная функция intern
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Alex Bubnov
я правильно понимаю, что несмотря на название основного конструктора c.l.Symbol.intern, символы реально не интернятся в отличие от кейвордов?
в факе упомянуты только кейворды https://clojure.org/guides/faq#why_keywords
источник