我有一个为 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”进行“查找”之后,只要返回“查找”(一个包含对地图的项目)是活着的。
与这个问题完全一样,我希望函数的返回类型是特征,返回值是实现该特征的类型的实例。一个简单的例子:
fn myfunction() -> Box<Printable> {
box TypeB{val: 2} as Box<Printable>
}
Run Code Online (Sandbox Code Playgroud)
如果我不明确地将其放入具有通用特征的盒子中,则会得到:
错误:类型不匹配:预期
Box<Printable>但已发现Box<TypeB>(预期特征可打印但已发现结构TypeB)
所以我想知道:
任何的想法?我正在使用编译器的当前夜间版本。