# Re: [Zope-dev] Acquisition Confusion :S

```Evan Simpson wrote:
> Here are the two and a half rules for deriving acquisition from a dotted
> expression:
>
> 1.  A.B == (B o A), where A is an unwrapped object
>
> 2.  (self o parent).B ==
>     a. (self.B o (self o parent)), if B is found in 'self'
>     b. (parent.B o (self o parent)), if B is found in 'parent'

Who decided these rules and why are they like they are?

So, is the working below now correct? (I feel like I'm back in School
doing maths ;-)

> > A has attributes B and C, C has attribute D

A.B.C.D = (B o A).C.D                                 - rule 1
= (A.C o (B o A)).D                           - rule 2b
= ((C o A) o (B o A)).D                       - rule 1
= ((C o A).D o ((C o A) o (B o A)))           - rule 2a
= ((C.D o (C o A)) o ((C o A) o (B o A)))     - rule 2a
= (((D o C) o (C o A)) o ((C o A) o (B o A))) - rule 1

Now, if you apply simplification one way (top to bottom?) you get:
= ((D o C) o ((C o A) o (B o A)))             - simplification
...which can't be simplified, AKAICS

However, if you simplify bottom to top, you get:
= (( D o (C o A)) o ((C o A) o (B o A)))      - simplification
= ( D o ((C o A) o (B o A)))                  - simplification

..which is what you got. Where is the order of simplification defined?
Is there a 'correct way'? Does it make a difference? (the above example
would seem to suggest not, other than in searchign efficiency)
...and of course, how does Zope do it?

<snip>
> In other words, aq_inner is the left-inner-most wrapper.  Find the leftmost
> 'o' in the expression, and you've got it.

Thanks, that's _much_ cleaer than the slides :-)

cheers,

Chris

_______________________________________________
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists -
http://lists.zope.org/mailman/listinfo/zope-announce
http://lists.zope.org/mailman/listinfo/zope )

```