13 ms·
I don’t think that’s a strong argument. It’s just function overloading that some languages enable, others don’t. Not a categorical difference.
by diarrhea 3y ago
I don’t think that’s a strong argument. It’s just function overloading that some languages enable, others don’t. Not a categorical difference.
- 38 3y agoOK please show me the equivalent code in C then
- tredre3 3y agoIt's possible with _Generic but there's a lot of caveats. Any seasoned C dev would just have two functions with a prefix or suffix, like cat_greet() and dog_greet(). But if you insist, it would look something like: typedef ... cat; typedef ... dog; void cat_greet(cat *obj) {/*do stuff */} void dog_greet(dog *obj) {/*do stuff */} #define greet(X) _Generic((X), cat: cat_greet, dog: dog_greet)(X) int main(...) { cat mycat; dog mydog; greet(&mycat); greet(&mydog); return 0; }
- 38 3y agothat is really, really ugly. using methods, I dont have to mess with function prefixes, and I dont have to pollute the global scope.
- ElegantBeef 3y agoAgain that's this language constraining you to that. With procedure overloading it's not required that you have to have that ugly API. For instance the following is valid Nim: type Cat = object # these are just 'struct' in a different skin Dog = object proc greet(c: Cat): string = "Meow" proc greet(d: Dog): string = "Bark" assert Dog().greet() == "Bark" assert Cat().greet() == "Meow"