相关疑难解决方法(0)

Rust中的traits和Haskell中的类型类有什么区别?

性状拉斯特似乎至少在表面上相似的类型类在Haskell,但我见过的人写的,有他们之间的一些差异.我想知道这些差异究竟是什么.

haskell traits rust

143
推荐指数
3
解决办法
1万
查看次数

了解特征和对象安全

我正在努力解决对象安全的基础问题.如果我有这个代码

struct S {
    x: i32
}

trait Trait: Sized {
    fn f(&self) -> i32 where Self: Sized;
}

fn object_safety_dynamic(x: Trait) {}
Run Code Online (Sandbox Code Playgroud)

我收到

fn object_safety_dynamic(x: Trait) {
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `traits::Trait` cannot be made into an object
= note: the trait cannot require that `Self : Sized`
Run Code Online (Sandbox Code Playgroud)

当添加/更改:Sized为特征的继承或f绑定时,我收到稍微不同的错误消息.

有人能解释一下:

  • 为什么这个特定的例子不起作用?Trait Objects一章说明"那么什么使方法对象安全?每种方法都必须要求Self: Sized".那不是满满的吗?

  • Trait: Sized和之间有什么区别where Self: Sized?(嗯,是的,一个继承了特性,另一个是参数绑定,但是从Rust的特质对象的角度来看?

  • 我必须做的首选改变是什么object_safety_dynamic

rustc 1.19.0-nightly (01951a61a 2017-05-20) …

traits rust trait-objects

3
推荐指数
2
解决办法
1279
查看次数

标签 统计

rust ×2

traits ×2

haskell ×1

trait-objects ×1