本文介绍了对于这个 UFCS 调用,Rust 想要什么类型的注释?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

抱歉,我可能遗漏了一些超级明显的内容.我想知道为什么我不能像这样调用我的 trait 方法.这不应该是标准的UFCS吗.

Sorry, I'm probably missing something super obvious. I wonder why I can't call my trait method like this. Shouldn't this be the standard UFCS.

trait FooPrinter {
    fn print ()  {
        println!("hello");
    }
}

fn main () {
    FooPrinter::print();
}

婴儿围栏:http://is.gd/ZPu9iP

我收到以下错误

error: type annotations required: cannot resolve `_ : FooPrinter`

推荐答案

如果不指定要调用的实现,则无法调用 trait 方法.该方法是否具有默认实现并不重要.

You cannot call a trait method without specifying on which implementation you wish to call it. It doesn't matter that the method has a default implementation.

实际的 UFCS 调用如下所示:

An actual UFCS call looks like this:

trait FooPrinter {
    fn print()  {
        println!("hello");
    }
}

impl FooPrinter for () {}

fn main () {
    <() as FooPrinter>::print();
}

游乐场

如果您不需要此方法的多态性,请将其移至 structenum,或使其成为全局函数.

If you don't need polymorphism on this method, move it to a struct or enum, or make it a global function.

这篇关于对于这个 UFCS 调用,Rust 想要什么类型的注释?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-21 10:06