On Fri, Jan 25, 2013 at 09:06:44PM +0100, Johannes Pfau wrote:
> Am Fri, 25 Jan 2013 10:39:50 -0800
> schrieb "H. S. Teoh" <[email protected]>:
> 
> 
> > - It's illegal to mark a function that takes 2 or more arguments as
> >   @property, because it makes no sense.
> > 
> 
> 3 or more arguments. UFCS properties have 2 arguments:
> 
> @property void age(Person p, int value); //OK, bad example, but you
> get the idea 
[...]

Good point, so it's 2 or more arguments for member functions, and 3 or
more for module-level functions.

Another thing I forgot to mention: once a function has been declared
@property, you cannot call it like a normal function anymore. So if you
declare at the module level:

        @property void age(Person p, int value);

then:

        void main() {
                Person p;
                //age(p, 123);  // Error: cannot call age like a normal function
                //p.age(123);   // ditto
                p.age = 123;    // OK
        }

The second case (p.age(123)) is valid only if age() returns a delegate.
Again, @property turns the function into a variable-like entity that
does not behave like a normal function to the outside world.


T

-- 
Lottery: tax on the stupid. -- Slashdotter

Reply via email to