rust能捏人不_Rust 语言是否反人类?

io::stdin() 返回的是引用, 合并之后引用丢掉了, 后面无法再用lines读取了.

不是的,看它的签名

pubfn stdin()-> Stdin

可以知道返回的是一个叫Stdin的struct。

letmutlines=io::stdin().lock().lines();

这里io::stdin()是个临时变量。如果你这么写,lock()返回的StdinLock会拿着一个临时变量的引用,临时变量销毁后这个引用就变成悬空的了。

其实编译器也说得很清楚了。

error[E0716]: temporary value dropped while borrowed

--> src\main.rs:33:21

|

33 | let mut lines = std::io::stdin().lock().lines().map(

| ^^^^^^^^^^^^^^^^ creates a temporary which is freed while still in use

...

37 | );

| - temporary value is freed at the end of this statement

这个坑上次才看人在C++里踩过。

所以,撞墙和跳楼选一个吧:)let mut lines = stdin.lock().lines();

上面这个, 迭代器为什么要用mut修饰, 迭代器调用next()就是修改了吗? next()只是返回元素, 修改的也只是内部的一个指针, 迭代器还是那个迭代器啊? 我就搞不懂这个设计. 一箱苹果, 我说下一个苹果, 无论我说几遍, 这还是一箱苹果, 除非变成一箱橘子, 这才是变化, 不是吗?

next()不是返回元素,而是把指向当前元素的迭代器变成指向下一个元素的迭代器。这样想的话,要求mut就是很自然的事情了。

println!("{} said `{}`.",name,quote);

这样抓狂的时候还会有很多,祝愿你早日度过最初的这段时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值