相关疑难解决方法(0)

我为另一个特征实现了一个特征,但不能从两个特征中调用方法

我有一个特点叫Sleep:

pub trait Sleep {
    fn sleep(&self);
}
Run Code Online (Sandbox Code Playgroud)

我可以Bed为每个结构提供不同的实现,但事实证明大多数人以很少的方式睡觉.你可以睡在床上:

pub trait HasBed {
    fn sleep_in_bed(&self);
    fn jump_on_bed(&self);
}

impl Sleep for HasBed {
    fn sleep(&self) {
        self.sleep_in_bed()
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你露营,你可以睡在帐篷里:

pub trait HasTent {
    fn sleep_in_tent(&self);
    fn hide_in_tent(&self);
}

impl Sleep for HasTent {
    fn sleep(&self) {
        self.sleep_in_tent()
    }
}
Run Code Online (Sandbox Code Playgroud)

有一些古怪的案例.我有一个可以靠墙站着睡觉的朋友,但大多数人大多数时候会陷入一些简单的情况.

我们定义一些结构并让它们Sleep:

struct Jim;

impl HasBed for Jim {
    fn sleep_in_bed(&self) {}
    fn jump_on_bed(&self) {}
}

struct Jane;

impl HasTent for Jane {
    fn …
Run Code Online (Sandbox Code Playgroud)

traits rust

30
推荐指数
2
解决办法
1万
查看次数

结构之间共享的方法

Rust的新手,为我的天真道歉.

我想定义一些概率分布,它们显然具有不同的参数.但是"界面"(我在Java中所知)应该是相同的.在最基本的层面上,每个分布都应该有sample一个sample_many方法.所以我实现了一个特征:

pub trait ERP<T> {
    fn sample(&self) -> T;
    fn sample_many(&self, i: isize) -> Vec<T>;
}
Run Code Online (Sandbox Code Playgroud)

然后可以创建特定的分布:

pub struct Bernoulli {
    pub p: f64
}

impl ERP<bool> for Bernoulli {
    fn sample(&self) -> bool {
        rand::random::<f64>() < self.p
    }

    fn sample_many(&self, i: isize) -> Vec<bool> {
        (0..i).map(|_| self.sample()).collect()
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是sample_many具体的方法.无论分布的类型如何,该方法都是相同的代码

pub struct Gaussian {
    pub mu: f64,
    pub sigma: f64
}

impl ERP<f64> for Gaussian {
    fn sample(&self) -> f64 {
        // …
Run Code Online (Sandbox Code Playgroud)

struct traits rust

7
推荐指数
1
解决办法
302
查看次数

标签 统计

rust ×2

traits ×2

struct ×1