• 3 Posts
  • 7 Comments
Joined 1 year ago
cake
Cake day: June 14th, 2023

help-circle


  • I could understand method = associated function whose first parameter is named self, so it can be called like self.foo(…). This would mean functions like Vec::new aren’t methods. But the author’s requirement also excludes functions that take generic arguments like Extend::extend.

    However, even the above definition gives old terminology new meaning. In traditionally OOP languages, the functions belonging to a class are “static methods” and the functions belonging to an instance are “instance methods”. Static methods are considered methods even though self may not be defined. So I think that translating OOP terminology into Rust, all associated functions would be considered methods, and those with/without method call syntax are instance/static methods.

    Unfortunately I think that some people misuse “method” to only refer to “instance method”, so to be 100% unambiguous the terms have to be:

    • Associated function: function in an impl block.
    • Static method: associated function whose first argument isn’t self (even if it takes Self under a different name, like Box::leak).
    • Instance method: associated function whose first argument is self, so it can be called like self.foo(…).
    • Object-safe method: a method callable from a trait object.