Rust中常量为什么用let不用const,变量用let mut不用var
1个回答
展开全部
记住 let 是函数式语言中的绑定(binding),而不是赋值(assignment)
let 这么强大的东西为什么不用呢,const,var 能玩匹配吗
假设一个函数或方法返回一个 tuple,需要把它解析出来
fn f() -> (&str, i32) {}
let (a, b) = f()
let (mut a, b) = f()
let (_, b) = f()
let (ref a, b) = f()
如果返回的是一个结构体,可以这么玩
struct Point {
x: f64,
y: f64,
}
fn f() -> Point {}
let Point{x: a, y:b} = f();
let Point{x: mut c, y:_} = f();
let Point{x: _, y: ref d} = f();
如果用 const, var 应该怎么写上面这些呢
const a;
var b;
Point p = f(); //Tuple t = f();
a = p.x; // a = p.0;
b = p.y; // b = p.1;
另外还有 if let 和 while let 这样的东西,玩的也是模式匹配,直接把 Some 里面非空的东西抠出来使用,Simple, Clear, Powerful!
if let Some(x) = option {
foo(x);
} else {
bar();
}
while let Some(x) = option {
println!("{}", x);
}
另外 const 有必要么,写过 C++ 或 Java 大型项目应该体会到到处是 const/finally,之前有人统计过 Rust 项目里 let mut 与单 mut 的比例(即mut和const的比例),其中单 let 是 let mut 的3倍,与其到处写 const 防止被修改,为什么不默认就是不可变 呢,这样可以省去许多击键数
let 这么强大的东西为什么不用呢,const,var 能玩匹配吗
假设一个函数或方法返回一个 tuple,需要把它解析出来
fn f() -> (&str, i32) {}
let (a, b) = f()
let (mut a, b) = f()
let (_, b) = f()
let (ref a, b) = f()
如果返回的是一个结构体,可以这么玩
struct Point {
x: f64,
y: f64,
}
fn f() -> Point {}
let Point{x: a, y:b} = f();
let Point{x: mut c, y:_} = f();
let Point{x: _, y: ref d} = f();
如果用 const, var 应该怎么写上面这些呢
const a;
var b;
Point p = f(); //Tuple t = f();
a = p.x; // a = p.0;
b = p.y; // b = p.1;
另外还有 if let 和 while let 这样的东西,玩的也是模式匹配,直接把 Some 里面非空的东西抠出来使用,Simple, Clear, Powerful!
if let Some(x) = option {
foo(x);
} else {
bar();
}
while let Some(x) = option {
println!("{}", x);
}
另外 const 有必要么,写过 C++ 或 Java 大型项目应该体会到到处是 const/finally,之前有人统计过 Rust 项目里 let mut 与单 mut 的比例(即mut和const的比例),其中单 let 是 let mut 的3倍,与其到处写 const 防止被修改,为什么不默认就是不可变 呢,这样可以省去许多击键数
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询