给定一个模拟条件概率分布的特征:
trait Distribution {
type T;
fn sample<U>(&self, x: U) -> Self::T;
}
Run Code Online (Sandbox Code Playgroud)
我想实现两个结构的特征,ConditionalNormal分别MultivariateConditionalNormal对标量和向量值分布进行建模。
这样的实现看起来像这样:
struct ConditionalNormal;
impl Distribution for ConditionalNormal {
type T = f64;
fn sample<U>(&self, x: U) -> Self::T {
0.0
}
}
struct MultivariateConditionalNormal;
impl Distribution for MultivariateConditionalNormal {
type T = f64;
fn sample<U>(&self, x: U) -> Self::T {
0.0 + x[0]
}
}
Run Code Online (Sandbox Code Playgroud)
(游乐场)
然而, 的实现MultivariateConditionalNormal是无效的,因为泛型x[0]不可索引。如果我添加特征边界,std::ops::Index<usize>则实现ConditionalNormal无效,因为标量f64不可索引。
我听说,例如,该Sized特征通过 ; 接受可选特征边界?Sized;我可以做类似的事情吗?有什么办法可以解决这个问题吗?
您可以将特征的定义更改为
trait Distribution<U> {
type T;
fn sample(&self, x: U) -> Self::T;
}
Run Code Online (Sandbox Code Playgroud)
这允许您在具有不同特征边界的各种类型上实现它。
impl<U> Distribution<U> for ConditionalNormal {
// ...
}
impl<U> Distribution<U> for MultivariateConditionalNormal
where
U: std::ops::Index<usize, Output = f64>,
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
652 次 |
| 最近记录: |