KennyTM~ wrote:
On Nov 28, 09 22:00, bearophile wrote:
Walter Bright:
and then s.foo(3), if foo is not a compile time member of s, is
rewritten as:
     s.opDynamic!("foo")(3);

I don't understand, isn't this the right translation?
s.opDynamic("foo", 3);
If the "foo" name is known at compile time only (as in all C# examples and in Python) you can't use a template argument. (And then it becomes useful to have associative arrays that are fast when the number of keys is small,< 10).

Bye,
bearophile

Probably because you can write

Variant myOpReallyDynamic(string name, Variant[] s...) {
   ...
}

Variant opDynamic(string name)(Variant[] s...) {
  return myOpReallyDynamic(name, s);
}

but not the other way round.

That is correct. Thanks for pointing that out. The operator is dynamic because it may perform a dynamic lookup under a static syntax. Straight dynamic invocation with a regular function has and needs no sugar.

Andrei

Reply via email to