Rust 变参数性状的新()方法

Rust 变参数性状的新()方法,rust,traits,Rust,Traits,我试图通过不同的内部参数实现一个特性: pub trait ERP { fn new() -> Self; fn sample(&self) -> f64; } pub struct Bernoulli { p: f64 } impl ERP for Bernoulli { fun new(p: f64) -> Bernoulli { Bernoulli { p: p } } fun sample(&

我试图通过不同的内部参数实现一个特性:

pub trait ERP {
    fn new() -> Self;
    fn sample(&self) -> f64;
}

pub struct Bernoulli {
    p: f64
}

impl ERP for Bernoulli {
    fun new(p: f64) -> Bernoulli {
        Bernoulli { p: p }
    }

    fun sample(&self) -> f64 { self.p } // Filler code
}

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

impl ERP for Gaussian {
    fun new(mu: f64, sigma: f64) -> Gaussian {
        Gaussian { mu: mu, sigma: sigma }
    }

    fun sample(&self) -> f64 { self.mu } // Filler code
}
但我当然明白

error: method new` has 1 parameter but the declaration in trait
`erp::ERP::new` has 0
因为我必须在trait中指定固定数量的参数

我也不能把
new
排除在trait之外,因为这会给我

error: method `new` is not a member of trait `ERP`

我的动机是希望公开的ERP接口保持一致,除了
新的
方法之外,因为每个发行版所需的参数取决于其实现背后的独特数学。有什么解决办法吗?

不要将
新功能作为特征的一部分。不支持输入参数数目可变的函数。

然后我得到错误“method
new
不是trait
ERP
的成员”。啊,我没有意识到您可以直接实现类型和类型的trait。谢谢。请看一下防锈书。您可以直接在类型上实现函数:您前面的问题可以在铁锈书的trait一章中找到答案