If a global function exists like this:
bool equals(char[] a, char[] b){
return a == b;
}
It is possible to use it like this:
char[] str1 = ...;
char[] str2 = ...;
str1.equals( str2 ); // compiles OK
But if this is used from within a class that also has a method with the
name "equals" the syntax above does not work any more:
class A {
bool equals( Object o ){ ... }
void foo (){
bool res = str1.equals(str2); // compile error
// equals(Object) does not
// match parameter types (char[],char[])
bool res2 = .equals(str1,str2); // compile OK
}
}
The compile error should not happen, because in case of str1.equals(.. only the methods of type(str1) and global functions should be looked at.
Comment #1 by bruno.do.medeiros+deebugz — 2008-09-22T07:47:30Z
To fix this, it would be necessary to make the "external member functions" a proper feature, instead of the simple hack/accidental-feature it is now. Among other things, it should work for other types and not just arrays, have a way to prevent normal external functions to *not* be considered as member functions, etc..