Rust 可变地获取函数中变量的所有权

Rust 可变地获取函数中变量的所有权,rust,Rust,有可能获得变量的可变所有权吗?如果有,如何获得?以下是我的意思示例(它不编译): fn读取所有输入(不要在:mut I之后使用)->SuperReturn{ //此函数将使用所有迭代器,因此希望将其删除 //从用户那里,而不是借用它。 } fn main(){ //以某种方式获得了一个iter。 设mut-myIter=。。。; //将其传递给函数。 读取所有输入(myIter); //让编译器在这里哭泣。 设x=myIter.next(); } 我知道我可以接受可变引用,但我更喜欢将迭代器移

有可能获得变量的可变所有权吗?如果有,如何获得?以下是我的意思示例(它不编译):

fn读取所有输入(不要在:mut I之后使用)->SuperReturn{
//此函数将使用所有迭代器,因此希望将其删除
//从用户那里,而不是借用它。
}
fn main(){
//以某种方式获得了一个iter。
设mut-myIter=。。。;
//将其传递给函数。
读取所有输入(myIter);
//让编译器在这里哭泣。
设x=myIter.next();
}
我知道我可以接受可变引用,但我更喜欢将迭代器移动到函数中,并以可变方式执行(因为循环当然需要可变迭代器)

谢谢,
菲尔

你差点就成功了。签名应为:

fn read_all_input<I: Iterator<u8>>(mut dont_use_after: I) -> SuperReturn {
//                                 ^^^
fn read\u all\u输入(mut don\u use\u after:I)->SuperReturn{
//                                 ^^^

继承的可变性发生在绑定/模式上,而不是类型上。
&mut T
中有一个
mut
,因为那里的可变性不是继承的。

好吧,谢谢!你知道变量是保证移动还是有可能被复制吗?@Phil,
I
是泛型,所以默认情况下它是moved,因为
I
没有
Copy
绑定。您可以添加它:
I:Iterator+Copy
,尽管我怀疑它是否有用-我想,很少有迭代器是可以隐式复制的。而且这里没有机会-值是移动的还是复制的,这取决于变量类型。@Phil还注意到e复制/移动区别是一种语义差异(它影响编译器分析,可能在插入
drop
调用的地方),它不影响性能特征或参数传递或赋值的代码。移动和复制都是隐藏的按位复制(想想
memcpy
).@delnan复制不会引入一个补充析构函数,即调用方中1个,被调用方中1个,而不是被调用方中1个?@Vladimitavevevevev你是说如果我不需要在类型约束中复制,它就会被移动?还是它真的只是依赖于类型?如果是,有办法强制移动吗?谢谢!
fn read_all_input<I: Iterator<u8>>(mut dont_use_after: I) -> SuperReturn {
//                                 ^^^