mam w sumie ciekawy problem
mam sobie jakis rekord DataRecord
, ktory zawiera pola w stylu id stuff flags data
data
to jest mapa
chcialbym sobie moc robic np. (assoc rekord :foo 5)
i dostac to :foo 5
w data
jesli zaimplementuje IPersistentMap
, ILookup
i Associative
to strace dostep do pól id stuff flags
a to nie takie trochę “hacky” ten assoc
?
bo patrząc na taki kod wtedy spodziewasz się zwykłej mapy, a tu nagle jebut - rekord/nested-mapa
update-in
chyba ci to zrobi co chcesz o ile dobrze rozumiem
no troche tak, ale wlasnie fajnie jakby to wygladalo jak mapa i dzialalo jak mapa
a reszta bylaby ukryta
i robila swoje
no rekord to w sumie jest mapa, tyle że w tym wypadku zagnieżdżona
no tak, mozna -in
więc imho -in
właśnie
ale patrze jak te rekordy sa uzywane
to w sumie po za data te rzeczy nie sa wprost uzywane
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
hm, chyba, zeby dotykac te pozostale pola przez jakies javowe api ;d
to dopiero hacky :simple_smile:
w sumie, nie
to jest do zrobienia
bo wewnatrz metod te pola sa zbindowane
wiec mozna sobie ich uzywac i zwracac nowe rekordy
trzeba ziamplementowac te protokoly i funkcje specjalne ktore ruszaja pola rekordu poza data
napisalem maly przyklad: https://gist.github.com/nooga/1cf8934e12d19299e742
przyszedlem z pytaniem i zostaliscie moimi gumowymi kaczkami ;D
nie czaję po co tyle rzeźby, update-in
załatwia temat :simple_smile:
no ale jak chce zeby mi sie np. ten journal z pryzkladu sam wypelnial tym co dotknalem
to za kazdym razem bym siedzial i pisal
(-> lulz (update :journal conj :x) (assoc-in [:data :x] 5))
zamiast (assoc lulz :x 5)
zauwaz, ze w tym przykladzie jest z mapa tez “historia edycji” w postaci journal
pewnie mozna by to wywalic do meta
no właśnie, a może meta
?
na jedno wyjdzie, tylko miejsce przechowywania sie zmieni
imho
innym wyjsciem byloby napisanie czegos w stylu (defn myassoc [a k v] (-> a (update :journal conj k) (assoc-in [:data k] v)))
ale wtedy kod by glupio wygladal i nie byloby za darmo wsyztskich bajerow typu update
czy cos
a tak mam cos co dziala jak kazda inna mapa, wyglada jak mapa i w ogole caly stdlib na tym dziala
ale ma little something extra pod maska
@paszek potwierdzi
sorry, już myłem zęby :sleeping_accommodation:
potwierdź
;d