On Wed, May 28, 2014 at 10:17 PM, Oleg Eterevsky <[email protected]> wrote: > Suppose, I want to add a new argument to a function in a > backwards-compatible way. In Python I provide a default and everything > works fine. In C++ or Java I write something like
This came up a few days ago in the discussion about Qt bindings. I associate function overloading with pitfalls like: - Methods which do different things depending on the number or types of arguments. Very very bad, since it's difficult to tell which overload is being used by skimming, and differences in functionality deserve names - but from my memory, rather common in practice. - Not being able to tell which overload is being used, even looking relatively closely, because of conversion wonkiness. Admittedly wouldn't really be a problem in Rust the way it is in C++, but if the alternatives depend on traits, you might have to figure out which trait the object you passed is actually using. - Excessive number of overloads for convenience, which are all specific to that method, requiring a bunch of boilerplate to implement and not generalizing for the API user to others. For example, from that discussion, http://qt-project.org/doc/qt-4.8/qpainter.html#fillRect - where, e.g., just asking the user to write QRect(x, y, w, h) instead of passing x, y, w, h as arguments would save several overloads. Though this doesn't apply to your example, many convenience types of overloads can be emulated using traits. On the other hand, I generally like keyword and default arguments. However, from my experience in Python it's often necessary when function A wraps function B to have the same default value in both declarations, which is problematic if the default needs to change. (Not *necessary* exactly, since passing around *args, **kwargs works too, but I'm not sure what that would look like in Rust, and I avoid it in Python because it makes it less clear from the declaration what arguments the method accepts.) Thus I think it might be better to make argument presence or absence somehow syntactic sugar for passing an Option rather than the usual behavior of specifying a default. But I don't know what the contributors think about it. _______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
