Fork me on GitHub
#clojure-poland
<
2016-03-01
>
nooga20:03:26

mam w sumie ciekawy problem

nooga20:03:04

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

nooga20:03:14

data to jest mapa

nooga20:03:46

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

nooga20:03:58

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

mostr20:03:23

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

mostr20:03:03

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

mostr20:03:41

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

nooga20:03:45

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

nooga20:03:55

a reszta bylaby ukryta

nooga20:03:59

i robila swoje

mostr20:03:11

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

nooga20:03:14

no tak, mozna -in

mostr20:03:20

więc imho -in

mostr20:03:23

właśnie

nooga20:03:23

ale patrze jak te rekordy sa uzywane

nooga20:03:53

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

nooga20:03:27

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

nooga20:03:35

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

mostr20:03:45

to dopiero hacky simple_smile

nooga21:03:32

w sumie, nie

nooga21:03:36

to jest do zrobienia

nooga21:03:48

bo wewnatrz metod te pola sa zbindowane

nooga21:03:08

wiec mozna sobie ich uzywac i zwracac nowe rekordy

nooga21:03:29

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

nooga21:03:44

przyszedlem z pytaniem i zostaliscie moimi gumowymi kaczkami ;D

jan.zy21:03:52

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

nooga21:03:26

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

nooga21:03:32

to za kazdym razem bym siedzial i pisal

nooga21:03:35

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

nooga21:03:47

zamiast (assoc lulz :x 5)

nooga21:03:10

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

nooga21:03:30

pewnie mozna by to wywalic do meta

mostr21:03:30

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

nooga21:03:44

na jedno wyjdzie, tylko miejsce przechowywania sie zmieni

nooga21:03:21

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

nooga21:03:39

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

nooga21:03:41

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

nooga21:03:56

ale ma little something extra pod maska

paszek22:03:07

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

nooga22:03:15

potwierdź