clojure-poland

2016-03-01T20:31:26.000217Z

mam w sumie ciekawy problem

2016-03-01T20:32:04.000218Z

mam sobie jakis rekord DataRecord, ktory zawiera pola w stylu id stuff flags data

2016-03-01T20:32:14.000219Z

data to jest mapa

2016-03-01T20:33:46.000221Z

chcialbym sobie moc robic np. (assoc rekord :foo 5) i dostac to :foo 5 w data

2016-03-01T20:34:58.000222Z

jesli zaimplementuje IPersistentMap, ILookup i Associative to strace dostep do pól id stuff flags

mostr 2016-03-01T20:36:23.000223Z

a to nie takie trochę “hacky” ten assoc?

mostr 2016-03-01T20:37:03.000224Z

bo patrząc na taki kod wtedy spodziewasz się zwykłej mapy, a tu nagle jebut - rekord/nested-mapa

mostr 2016-03-01T20:37:41.000225Z

update-in chyba ci to zrobi co chcesz o ile dobrze rozumiem

2016-03-01T20:37:45.000226Z

no troche tak, ale wlasnie fajnie jakby to wygladalo jak mapa i dzialalo jak mapa

2016-03-01T20:37:55.000227Z

a reszta bylaby ukryta

2016-03-01T20:37:59.000228Z

i robila swoje

mostr 2016-03-01T20:38:11.000229Z

no rekord to w sumie jest mapa, tyle że w tym wypadku zagnieżdżona

2016-03-01T20:38:14.000230Z

no tak, mozna -in

mostr 2016-03-01T20:38:20.000231Z

więc imho -in

mostr 2016-03-01T20:38:23.000232Z

właśnie

2016-03-01T20:38:23.000233Z

ale patrze jak te rekordy sa uzywane

2016-03-01T20:38:53.000234Z

to w sumie po za data te rzeczy nie sa wprost uzywane

2016-03-01T20:39:27.000235Z

ale nie wiem, chyba nie da sie zrobic tak jak ja chce bez utraty dostepu do tych pozostalych pól bo record tez implementuje te protokoły

2016-03-01T20:41:35.000236Z

hm, chyba, zeby dotykac te pozostale pola przez jakies javowe api ;d

mostr 2016-03-01T20:45:45.000237Z

to dopiero hacky :simple_smile:

2016-03-01T21:01:32.000238Z

w sumie, nie

2016-03-01T21:01:36.000239Z

to jest do zrobienia

2016-03-01T21:01:48.000240Z

bo wewnatrz metod te pola sa zbindowane

2016-03-01T21:02:08.000241Z

wiec mozna sobie ich uzywac i zwracac nowe rekordy

2016-03-01T21:02:29.000242Z

trzeba ziamplementowac te protokoly i funkcje specjalne ktore ruszaja pola rekordu poza data

2016-03-01T21:19:27.000243Z

napisalem maly przyklad: https://gist.github.com/nooga/1cf8934e12d19299e742

2016-03-01T21:21:44.000244Z

przyszedlem z pytaniem i zostaliscie moimi gumowymi kaczkami ;D

jan.zy 2016-03-01T21:22:52.000245Z

nie czaję po co tyle rzeźby, update-in załatwia temat :simple_smile:

2016-03-01T21:24:26.000246Z

no ale jak chce zeby mi sie np. ten journal z pryzkladu sam wypelnial tym co dotknalem

2016-03-01T21:24:32.000247Z

to za kazdym razem bym siedzial i pisal

2016-03-01T21:25:35.000248Z

(-> lulz (update :journal conj :x) (assoc-in [:data :x] 5))

2016-03-01T21:25:47.000249Z

zamiast (assoc lulz :x 5)

2016-03-01T21:27:10.000250Z

zauwaz, ze w tym przykladzie jest z mapa tez “historia edycji” w postaci journal

2016-03-01T21:27:30.000251Z

pewnie mozna by to wywalic do meta

mostr 2016-03-01T21:38:30.000252Z

no właśnie, a może meta?

2016-03-01T21:39:44.000253Z

na jedno wyjdzie, tylko miejsce przechowywania sie zmieni

2016-03-01T21:40:05.000254Z

imho

2016-03-01T21:41:21.000255Z

innym wyjsciem byloby napisanie czegos w stylu (defn myassoc [a k v] (-> a (update :journal conj k) (assoc-in [:data k] v)))

2016-03-01T21:41:39.000256Z

ale wtedy kod by glupio wygladal i nie byloby za darmo wsyztskich bajerow typu update

2016-03-01T21:41:43.000257Z

czy cos

2016-03-01T21:43:41.000258Z

a tak mam cos co dziala jak kazda inna mapa, wyglada jak mapa i w ogole caly stdlib na tym dziala

2016-03-01T21:43:56.000259Z

ale ma little something extra pod maska

2016-03-01T22:07:20.000260Z

@paszek potwierdzi

paszek 2016-03-01T22:32:07.000261Z

sorry, już myłem zęby :sleeping_accommodation:

2016-03-01T22:35:15.000262Z

potwierdź

✅ 1
2016-03-01T22:35:16.000263Z

;d