[Zope-dev] Philosophy.__of__(Acquisition).questions
Martijn Pieters
mj@antraciet.nl
Sun, 26 Sep 1999 23:26:11 +0200
At 22:28 26-9-99 , Evan Simpson wrote:
>I thought I understood Acquisition, until I read the docs at
>http://www.digicool.com/releases/ExtensionClass/Acquisition.html.
>
>*Really* read them, until my brain hurt, then I went and had a lie down,
>then tried again.
>
>Now I'm *really* confused! Let me take the example from the docs:
>
>We have a tree that includes paths a/x and a/b/c. Whenever we ask an
>object which supports acquisition for an attribute which turns out to
>support acquisition, we are given a wrapper which preserves the
>context. Using 'of' to mean 'in the context of', the general
>transformation rule is (path/top/attr) -> (path/attr) of (path/top) if
>attr is not an element of top, or (path/attr) -> (attr of path) if it
>is.
>
>Here are some access paths and the resulting wrapper objects:
>
>a/b
> b of a
>a/b/c
> c of (a/b) -> c of (b of a)
>a/x
> x of a
>a/b/x
> (a/x) of (a/b) -> (x of a) of (b of a)
>a/b/c/x
> (a/b/x) of (a/b/c) -> ((a/x) of (a/b)) of (a/b/c) -> ((x of a) of (b
>of a)) of (c of (b of a))
>
>Once a wrapper is written in 'of' notation, you can read off the
>acquisition order from left to right, skipping repeats. Thus, for
>'a/b/c', the acquisition order is c, b , a, while for 'a/b/c/x' it is x,
>a, b, c.
>
>The addition of x reverses the acquisition sequence for the previous
>step! If x were contained in b instead, then we would have a/b/c/x ->
>(a/b/x) of (a/b/c) -> (x of b of a) of (c of b of a), giving sequence x,
>b, a, c!!
>
>This seemed horribly unintuitive to me, since I thought that an acquired
>object was only given the context of the object which started the
>acquisition search. This would lead to the same result for 'a/b/c', but
>'a/b/c/x' would give x, c, b, a.
>
>Jim Fulton kindly explained, in another thread, how the acquired
>object's context is searched before the acquiring object's. Fine,
>that's fully consistent with all of the above.
>
>Now I try it out in Zope. I make nested folders 'a/b/c' in the root. I
>put DTML method 'x' in 'a', and have it display <dtml-var prop>. I give
>a, b, and c properties named 'prop', containing 'a!', 'b!', and 'c!'
>respectively.
>
>I call '/a/b/c/x' and it prints 'c!'
>
>What the hell? According to the docs, shouldn't it print 'a!'?
>
>Ok, let's try making DTML Method y in c with body "<dtml-var x>". Same
>result. How about "<dtml-with x><dtml-var prop></dtml-with>"? Same
>thing.
>
>Help??
Now make it a DTML Document =). See?
--
Martijn Pieters, Web Developer
| Antraciet http://www.antraciet.nl
| T: +31 35 7502100 F: +31 35 7502111
| mj@antraciet.nl http://www.antraciet.nl/~mj
| PGP: http://wwwkeys.nl.pgp.net:11371/pks/lookup?op=get&search=0xA8A32149
---------------------------------------------