From: Oren Ben-K. <or...@ri...> - 2002-11-29 20:53:12
|
Brian Ingerson wrote: > I think that the above object could be serialized as: > > --- !perl/Polylib::Polyhedron | > 0 1 0 0 0 0 > 0 0 1 0 0 0 > 0 0 0 1 0 0 > 0 0 0 0 1 0 > 0 0 0 0 0 1 A better way would be to write it as: --- !perl/Polylib::Polyhedron | - [ 0 1 0 0 0 0 ] - [ 0 0 1 0 0 0 ] - [ 0 0 0 1 0 0 ] - [ 0 0 0 0 1 0 ] - [ 0 0 0 0 0 1 ] > I'm pretty sure that the spec/model intent now allows for this. The old > point of contention was that "kind" could not be changed on a load. But > I don't think we dictate that anymore. Oren? Each type family can have just one kind - you can't serialize the same type family as scalars on Tuesdays and as a colletion on Wednesdays. That said, it is your choice whether to use a scalar, a sequence or a mapping for each type family, and YAML does not constrain you in this. One point though, the spec says that scalars are considered to be "immutable", so it is safe to convert two equal scalars with a shared memory reference (very useful for strings etc.). Collections are considered mutable (equality != identity). In the above example, my bet is that the data is "mutable", so the representation as a collection is what you'd want. It also makes the data more accessible to generic tools (e.g., YPATH can be used to access matrix elements). Have fun, Oren Ben-Kiki |
From: Oren Ben-K. <or...@ri...> - 2002-11-29 21:53:43
|
I wrote: > A better way would be to write it as: > > --- !perl/Polylib::Polyhedron | Should without the '|' of course: --- !perl/Polylib::Polyhedron > - [ 0 1 0 0 0 0 ] > - [ 0 0 1 0 0 0 ] > - [ 0 0 0 1 0 0 ] > - [ 0 0 0 0 1 0 ] > - [ 0 0 0 0 0 1 ] Have fun, Oren Ben-Kiki |
From: Brian I. <in...@tt...> - 2002-11-30 08:46:02
|
On 29/11/02 23:54 +0200, Oren Ben-Kiki wrote: > I wrote: > > A better way would be to write it as: > > > > --- !perl/Polylib::Polyhedron | > Should without the '|' of course: > --- !perl/Polylib::Polyhedron > > - [ 0 1 0 0 0 0 ] Don't you mean this?? - [ 0, 1, 0, 0, 0, 0 ] Cheers, Brian |
From: Oren Ben-K. <or...@ri...> - 2002-11-30 21:12:17
|
Brian Ingerson wrote: > > > --- !perl/Polylib::Polyhedron | > > Should without the '|' of course: > > --- !perl/Polylib::Polyhedron > > > - [ 0 1 0 0 0 0 ] > > Don't you mean this?? > > - [ 0, 1, 0, 0, 0, 0 ] Yes, of course. Sorry. Have fun, Oren Ben-Kiki |
From: Oren Ben-K. <or...@ri...> - 2002-11-30 21:17:28
|
Brian Ingerson wrote: > I think the above block scalar is a nice way to do matrix-like classes. > But TMTOWTDI. (As long as you only pick OWTDI :) Got it in one. Well, two :-) > One point though, the spec says that scalars are considered to be > "immutable"... > Not sure what you mean by immutable scalars. If I load: > > --- > size: 42 > ... > > surely I can change the size to 43. Right? Right. What you can't do is change the value 42 itself; you'd be discarding it and using a new one, 43. While if the value was a matrix, you could change it "in place", maintaining its identity. > I'm sure you meant something else. Could you send a code example? I'll follow Clark advice and quoted directly from the spec... Section 4.2.3 in this case: --- | C syntax: | struct Point { int x; int y; } p = { 1, 2 }; YAML syntax: !Point { x: 1, y: 2 } It is impossible to modify the integer value 1. The only modification possible is constructing a new, unrelated integer value 3 and using this new value for the X coordinate. Performing this replacement would cause the point to change "in place" from { x: 1, y: 2 } to { x: 3, y: 2 }. Thus, in this example points are mutable but integers are not. ... I hope that clarifies things. Have fun, Oren Ben-Kiki |
From: Brian I. <in...@tt...> - 2002-11-30 08:59:37
|
On 29/11/02 22:54 +0200, Oren Ben-Kiki wrote: > Brian Ingerson wrote: > > I think that the above object could be serialized as: > > > > --- !perl/Polylib::Polyhedron | > > 0 1 0 0 0 0 > > 0 0 1 0 0 0 > > 0 0 0 1 0 0 > > 0 0 0 0 1 0 > > 0 0 0 0 0 1 > > A better way would be to write it as: > > --- !perl/Polylib::Polyhedron | > - [ 0 1 0 0 0 0 ] > - [ 0 0 1 0 0 0 ] > - [ 0 0 0 1 0 0 ] > - [ 0 0 0 0 1 0 ] > - [ 0 0 0 0 0 1 ] > > > I'm pretty sure that the spec/model intent now allows for this. The old > > point of contention was that "kind" could not be changed on a load. But > > I don't think we dictate that anymore. Oren? > > Each type family can have just one kind - you can't serialize the same type > family as scalars on Tuesdays and as a colletion on Wednesdays. That said, > it is your choice whether to use a scalar, a sequence or a mapping for each > type family, and YAML does not constrain you in this. Right. I think the above block scalar is a nice way to do matrix-like classes. But TMTOWTDI. (As long as you only pick OWTDI :) > One point though, the spec says that scalars are considered to be > "immutable", so it is safe to convert two equal scalars with a shared memory > reference (very useful for strings etc.). Collections are considered mutable > (equality != identity). In the above example, my bet is that the data is > "mutable", so the representation as a collection is what you'd want. It also > makes the data more accessible to generic tools (e.g., YPATH can be used to > access matrix elements). Not sure what you mean by immutable scalars. If I load: --- size: 42 ... surely I can change the size to 43. Right? I'm sure you meant something else. Could you send a code example? Cheers, Brian |