小编Fab*_*aru的帖子

将 Option<&T> 转换为 Option<T>

我有一个为 int 做的函数:

fn some_to_value(src: Option<&int>) -> Option<int> {
    match src {
        Some(x) => Some(*x),
        None => None
    }
}
Run Code Online (Sandbox Code Playgroud)

我想让它通用(并且仍然在调用者级别使用“int”)。如果复制 T 的实例对我来说就可以了。所以我尝试这样做:

fn some_to_value<T>(src: Option<&T>) -> Option<T> {
    match src {
        Some(x) => Some(*x),
        None => None
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到:

error: cannot move out of dereference of `&`-pointer
Some(x) => Some(*x),
                ^~
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它会失败(我是初学者)。

一些上下文:我制作了一个 Option 的副本,因为我意识到在对“HashMap”进行“查找”之后,只要返回“查找”(一个包含对地图的项目)是活着的。

generics rust

5
推荐指数
1
解决办法
800
查看次数

将特性作为函数的返回值并进行显式转换

与这个问题完全一样,我希望函数的返回类型是特征,返回值是实现该特征的类型的实例。一个简单的例子:

fn myfunction() -> Box<Printable> {
    box TypeB{val: 2} as Box<Printable>
}
Run Code Online (Sandbox Code Playgroud)

如果我不明确地将其放入具有通用特征的盒子中,则会得到:

错误:类型不匹配:预期Box<Printable>但已发现 Box<TypeB>(预期特征可打印但已发现结构TypeB)

所以我想知道:

  • 如果这是在Rust中继续进行以返回特征类型的正常方法
  • 为什么Rust编译器无法推断出自动向下转换

任何的想法?我正在使用编译器的当前夜间版本。

casting traits rust

5
推荐指数
1
解决办法
1439
查看次数

标签 统计

rust ×2

casting ×1

generics ×1

traits ×1