Why does the compiler need an implementation of a trait to call a default free function?

前端 未结 2 1068
野的像风
野的像风 2021-01-25 22:47

When calling a default implementation on a trait which does not take self, why does it neeed an implementing type to be annotated?

A minimal, reproducible ex

2条回答
  •  迷失自我
    2021-01-25 23:23

    This is not only a default implementation but the very specific case in which this default implementation does not even mention Self/self in its parameters, result and body.

    I find much more easy to understand a rule saying that a type is required every time we use a trait, in any case, rather that « except if the default implementation does not even mention Self/self in its parameters, result and body ».

    For this very specific use case, where you do not want to explicitly name a type when calling the function you need, I suggest using a free function.

    mod builder {
        // ...
        pub fn make_default() -> Simple {
            Simple
        }
        // ...
    }
    
    pub fn main() {
        let _ = builder::make_default();
    }
    

提交回复
热议问题