- 主题:闭包move声明后,域外的变量仍然可以访问和修改,是否闭包的规
- let mut  x = 10;
 let add_x = move |y| x + y;
 println!("{}", add_x(5)); // 输出 15
 x=13;
 println!("{}", x); // 仍然可以使用 x
 
 
 ---
 
 通过讨论后发现
 
 move作为语义关键字  本身栈内存数据是复制的 对于有堆的 变量  move之后 原有变量再使用 编译器检查不通过
 
 
 原先一直以为 编译器也会对栈上的原有内存做一些操作 其实没啥操作  move之后 再使用 编译不通过
 
 
 语法上的约束  底层实现其实没做啥
 
 
 栈上的内存随函数调用返回后释放
 --
 修改:nextworld8 FROM 223.104.40.*
 FROM 223.104.40.*
 
- 因为move的是 i32,i32实现了copy trait
 --
 FROM 123.125.204.*
 
- 估计是 栈上的直接复制了
 - 来自 水木社区APP v3.5.7
 【 在 tsa300 的大作中提到: 】
 : 因为move的是 i32,i32实现了copy trait
 : --
 :
 --
 FROM 223.104.40.*
 
- 估计所有权只主要针对数据在堆上的,如果数据在栈上 直接复制了
 
 rsut的语法好奇葩
 --
 FROM 223.104.40.*
 
- 不用估计,你把 i32 换成 Vec 或 String , 编译器会拒绝编译,并且告诉你因为 Vec/String 没实现 Copy trait 所以move后不能再使用了。
 
 
 【 在 nextworld8 的大作中提到: 】
 : 估计是 栈上的直接复制了
 : - 来自 水木社区APP v3.5.7
 : :
 --
 FROM 123.120.12.*
 
- ok
 
 看了规范 和堆栈也没有明确的关系
 
 还是编译器约束导致的  只有实现了copy trait的才可以直接复制
 
 
 【 在 tsa300 的大作中提到: 】
 : 不用估计,你把 i32 换成 Vec 或 String , 编译器会拒绝编译,并且告诉你因为 Vec/String 没实现 Copy trait 所以move后不能再使用了。
 :
 --
 FROM 223.104.40.*
 
- 其实就是java里面有没有new的区别,rust的文档在这块没有特意写明白。
 
 【 在 nextworld8 的大作中提到: 】
 : ok
 : 看了规范 和堆栈也没有明确的关系
 : 还是编译器约束导致的  只有实现了copy trait的才可以直接复制
 : ...................
 --
 FROM 1.202.141.*
 
- 有点类似 又有点不同
 java靠运行时gc管理堆对象  在逃逸分析编译器优化后 new可能被优化到栈
 
 rust通过在编译时自动生成一些释放资源的代码 编译器没那么智能 只能预定一些规范
 
 通过是又需要对一些特定逻辑进行修补  所以rust很多限定词用法 很乱
 
 
 的确 文档很不清晰  估计想让使用者认为rust是道 抽象的不普遍又有特定的规则 不得不到处打补丁的术
 
 
 【 在 kawolu 的大作中提到: 】
 : 其实就是java里面有没有new的区别,rust的文档在这块没有特意写明白。
 :
 --
 修改:nextworld8 FROM 223.104.40.*
 FROM 223.104.40.*
 
- 编译器或者解释器优化,我认为不属于语言特性,而是编译器的便宜之法。
 rust的乱我还没看到...不同类型的工作交织进行,看得很慢。
 
 
 【 在 nextworld8 的大作中提到: 】
 :  不太一样的哟  java靠运行时gc管理对象  new可能被优化到栈
 :  rust通过在编译时自动生成一些释放资源的代码 编译器没那么智能 只能预定一些规范
 :  通过是又需要对一些特定逻辑进行修补  所以rust很多限定词用法 很乱
 : ...................
 --
 FROM 1.202.141.*
 
- 例如  函数返回值 要求固定的size的类型 可以返回impl trait 当时如果返回不同实现的可能具有不同属性 又可能size不固定
 
 需要用到box<dyn Trait>
 
 
 最近经常搞得头乱
 
 
 【 在 kawolu 的大作中提到: 】
 : 编译器或者解释器优化,我认为不属于语言特性,而是编译器的便宜之法。
 : rust的乱我还没看到...不同类型的工作交织进行,看得很慢。
 :
 --
 修改:nextworld8 FROM 223.104.40.*
 FROM 223.104.40.*