Hi, > On 17 Oct 2017, at 11:46, Herby Vojčík <he...@mailbox.sk> wrote: > > newFromAccessors: aCollection ofObject: anObject > "Performs supplied accessors on anObject > and returns my instance with accessor -> result pairs." > > ^ self newFrom: (aCollection collect: [ :each | each -> (anObject > perform: each) ]) > > "I use it for example in this piece of code: > NeoJSONObject > newFromAccessors: #(good bad) > ofObject: self dao sumOfAllAnswers > "
If (but see further) I would add this kind of functionality, I would go for the following methods in a 'copying' protocol on the instance side (in analogy with Object>>#copyFrom:) : NeoJSONObject>>#copyFrom: anObject accessors: accessors accessors do: [ :each | self at: each put: (anObject perform: each) ] NeoJSONObject>>#copyFrom: anObject instVarNames: instVarNames instVarNames do: [ :each | self at: each put: (anObject instVarNamed: each) ] NeoJSONObject>>#copyFrom: aDictionary keys: keys keys do: [ :each | self at: each put: (aDictionary at: each) ] NeoJSONObject>>#copyAllInstVarsFrom: anObject self copyFrom: anObject instVarNames: anObject class allInstVarNames Which would allow you to write stuff like: NeoJSONObject new copyFrom: NeoJSONTestObject2 example1 accessors: #(id height width). NeoJSONObject new copyFrom: NeoJSONTestObject2 example1 instVarNames: #(id height width). NeoJSONObject new copyAllInstVarsFrom: NeoJSONTestObject2 example1. NeoJSONObject new copyFrom: { #id->1. #height->200. #width->100 } asDictionary keys: #(width height). However, there are a couple of reasons why I am not so enthusiastic. - You want conversions to/from NeoJSONObject and your domain objects, by creating one for the other, that is exactly why mapping exists: to do this without copying (i.e. directly & more efficiently) - Mapping is also better because it can be applied to values as well (recursively) - I would rather put the responsibility of conversion to the domain objects (say in #toNeoJSONObject and #fromNeoJSONObject:) - I would prefer NeoJSONObject to keep very simple Just some comments, thinking aloud. Sven