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.
I could understand method = associated function whose first parameter is named
self
, so it can be called likeself.foo(…)
. This would mean functions likeVec::new
aren’t methods. But the author’s requirement also excludes functions that take generic arguments likeExtend::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:
impl
block.self
(even if it takesSelf
under a different name, likeBox::leak
).self
, so it can be called likeself.foo(…)
.I’d call instance methods just methods, it fits more into how the word is commonly used.
The omission is just way to easy not to use.