[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Key-Value Operators on Array

From: Tom Hageman
Subject: Re: Key-Value Operators on Array
Date: Thu, 6 May 2004 23:59:52 +0200

Hi Philip,

On Thu, 6 May 2004 18:37:12 +0200, Philip Motteli wrote:
> Hi
> Usually, every key-value operation, that is applied to an array, is
> applied to its contents. So the array is actually transparent.
> There are certain exceptions though:
> @avg
> @count
> @distinctUnionOfArrays
> @distinctUnionOfObjects
> @max
> @min
> @sum
> @unionOfArrays
> @unionOfObjects
> They are all marked by a preceding '@'. All these operators are sent to 
> the array object itself and not to the objects it contains.
> My question, proposal is: Why not use this '@' as a general mark, that
> an operator should be sent to the array itself? Not restrict its use to 
> these few mentionned predefined operators?
> This wouldn't be a problem for code written for Cocoa. Cocoa would just 
> not have that feature and (probably) raise an exception.
> Or is there perhaps another way to do that and I'm just missing
> something?

In a previous incarnation (EOF) of key-value coding you could add  
-compute<Name>ForKey: methods in a category of NSArray, and these would   
be made available as "@<name>" operators in -valueForKeyPath:

For example, one could implement:

@interface NSArray(MyCategory)
- (id)computeAtForKey:(NSString *)aKey;

such that it can subsequently be used like:

 secondElement = [anArray valueForKeyPath:@"@at.2"];


 nameOfThirdElement = [anArray valueForKeyPath:@"@at.3.name"];

I haven't checked that if this mechanism still works in the Mac OS X 10.3  
Cocoa incarnation though...

__/__/__/__/  Tom Hageman  <address@hidden> (home)  [NeXTmail/Mime OK]
  __/ __/_/         <address@hidden> (work)  [Mime OK]
__/  _/_/                                              [ObjC retain];
objc: FREED(id): message retain sent to freed object=0xdeadcafe

reply via email to

[Prev in Thread] Current Thread [Next in Thread]