美文网首页
rust - universal function call a

rust - universal function call a

作者: 家中古词 | 来源:发表于2019-06-05 15:19 被阅读0次

    一个 struct 可以实现多个 trait。而多个 trait 的作者无力要求对方不能与自己重名。所以可能会出现如下情况:

    trait TraitA {
        fn call(&self);
    }
    
    trait TraitB {
        fn call(&self);
    }
    
    struct Struct;
    
    impl TraitA for Struct {
        fn call(&self);
    }
    
    impl TraitB for Struct {
        fn call(&self);
    }
    

    这时,Struct 的作者和使用者,调用 s.call() 时会产生歧义。为了消除这种歧义,其作者和使用者需要借用一种语法区分此二函数。

    Universal Function Call Syntax

    rust 用 <Struct as TraitA>::call(&s)<Struct as TraitB>::call(&s) 来区分这两个调用。尖括号内的部分,指定了 struct 名字和 trait 名字,双冒号之后是函数的名字,而且用显式传递引用的办法将函数绑定的对象传递给了函数。因为使用了尖括号,这一般称作 Angle-Bracket Form。

    一般情况下,Struct 可以从 s 的类型得知,所以上述调用可以简写成 TraitA::call(&s)TraitB::call(&s)

    相关文章

      网友评论

          本文标题:rust - universal function call a

          本文链接:https://www.haomeiwen.com/subject/uaijxctx.html