Size: a a a

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

2020 February 03

T

The2lb3oz4dr10½grOfHedgehogs in Clojure — русскоговорящее сообщество
Сергей Суржик
Стоят перед тобой два робота, сделаны по одинм схемам. Полностью идентичны. В понятиях JS если их сравнить Робот1 != Робот2, а все потому что сделаны на разных заводах. Так мне насрать, что они сделаны на разных заводах. Для меня логичнее по начинке сранвить
Робот1 == Робот2
Имеет семантику Робот1 это тот же самый робот, что и Робот2

Будешь ты считать сколько ты на своём заводе произвел единиц одинаковых по содержанию роботов, а окажется, что только один, потому что они все друг другу равны у тебя

Конечно, если ты каждому не проставишь серийный номер)))
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Могу вбросить самописные кусочки js для сравнивания объектов
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
почему делая так
user=> (def a {:a 1})
#'user/a
user=> (def b {:a 1})
#'user/b
user=> (= a b)

ожидаю, что у меня (чисто по-человечески) должно быть в итоге true?
источник

T

The2lb3oz4dr10½grOfHedgehogs in Clojure — русскоговорящее сообщество
Сергей Суржик
почему делая так
user=> (def a {:a 1})
#'user/a
user=> (def b {:a 1})
#'user/b
user=> (= a b)

ожидаю, что у меня (чисто по-человечески) должно быть в итоге true?
Потому что https://t.me/clojure_ru/107156
источник

T

The2lb3oz4dr10½grOfHedgehogs in Clojure — русскоговорящее сообщество
Семантика сущностей разная
То что и те и другие в фигурных скобках пишутся -- не аргумент им вести себя одинаково
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
user=> (ref a)
#object[clojure.lang.Ref 0x7026b7ee {:status :ready, :val {:a 1}}]
user=> (ref b)
#object[clojure.lang.Ref 0x62a4417 {:status :ready, :val {:a 1}}]
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
я хочу, чтобы он по ref сравнивал. хочу как в js
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Clojure’s = is true when called with two mutable Clojure objects, i.e. vars, refs, atoms, or agents, or with two "pending" Clojure objects, i.e. futures, promises, or delays, if:

Both arguments are the identical object, i.e. (identical? x y) is true.
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
user=> (def x {:foo 1, :bar -3})
#'user/x
user=> (def y {:foo 1, :bar -3})
#'user/y
;; Values are equal, but different objects were constructed
user=> (= x y)
true
user=> (identical? x y)
false
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
почему так нельзя в js?
источник

MM

Mikhail Malakhovskiy in Clojure — русскоговорящее сообщество
мутабельность
источник

MM

Mikhail Malakhovskiy in Clojure — русскоговорящее сообщество
языки принципиально по разному работают, глупо от них требовать одинаковой логики работы
источник

T

The2lb3oz4dr10½grOfHedgehogs in Clojure — русскоговорящее сообщество
Сергей Суржик
почему так нельзя в js?
Так можно. Но семантика объекта такова, что это пустой простой объект без какой либо логики присущей словарям. Если хочешь сравнивать -- используй класс словаря, который напишешь сам или возьмешь из библиотеки, может даже стандартной, если там вдруг есть
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
объекты в джаве сравнивают по кастомному полю, например логин юзера
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
в питоне переопределяют __eq__
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
def __eq__(self, other):
   return self.login == other.login
источник

MM

Mikhail Malakhovskiy in Clojure — русскоговорящее сообщество
так в джаве также переопределяют equals
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
и даже в хаскеле
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
это к замечанию про ссылки
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
дайте сравнение сущностей (объекты, строки, массивы и т.п.) ПО ЗНАЧЕНИЮ и по чему-угодно еще из коробки, но сделайте это отдельными видами сравнений. Чтобы не плодить из проекта в проект костылей
источник