1
Rust特性与Go Interface有何不同?
我对Go相对熟悉,在其中编写了许多小程序。当然,Rust我不太熟悉,但请注意。 最近阅读过http://yager.io/programming/go.html以后,我认为我将亲自研究泛型的两种处理方式,因为在实践中,当接口实际上没有太多内容时,这篇文章似乎不公平地批评了Go。不能优雅地完成。我一直在听到关于Rust的特质多么强大的炒作,除了人们对Go的批评之外,什么也没有。有了Go的经验,我想知道它的真实性以及最终的差异。我发现特征和接口非常相似!最终,我不确定是否遗漏了一些东西,因此这里是他们相似之处的快速教育总结,您可以告诉我我错过了什么! 现在,让我们从他们的文档中了解Go Interfaces : Go中的接口提供了一种指定对象行为的方式:如果可以做到这一点,则可以在这里使用它。 到目前为止,最常见的接口是Stringer返回表示对象的字符串。 type Stringer interface { String() string } 因此,String()在其上定义的任何对象都是Stringer对象。可以在类型签名中使用它,这样func (s Stringer) print()几乎可以获取所有对象并进行打印。 我们也有interface{}哪个对象。然后,我们必须在运行时通过反射确定类型。 现在,让我们从他们的文档中了解Rust特性: 简单来说,特征是一组零个或多个方法签名。例如,对于可以打印到控制台的内容,我们可以使用单个方法签名声明特征Printable: trait Printable { fn print(&self); } 这立即看起来与我们的Go Interfaces非常相似。我看到的唯一区别是,我们定义了特征的“实现”,而不仅仅是定义了方法。所以,我们做 impl Printable for int { fn print(&self) { println!("{}", *self) } } 代替 fn print(a: int) { ... } 额外的问题:如果定义一个实现特征但不使用的函数,在Rust中会发生什么impl?就是行不通吗? 与Go的接口不同,Rust的类型系统具有类型参数,可让您执行适当的泛型和诸如interface{}编译器和运行时实际知道类型的操作。例如, …