【发布时间】:2019-02-25 12:03:10
【问题描述】:
我在 Rust 中有一个如下实现。在主函数中,我正在读取SalaryRange 枚举中的一个值,这将显示High("So High")。
// This can be a complex type, just using string for the question
type SRange = String;
type SalEnu = SalaryRange<SRange>;
struct User<SRange> {
username: String,
email: String,
sign_in_count: u64,
active: bool,
income: Income<SRange>,
}
struct Income<SRange> {
salary_range: SalaryRange<SRange>
}
#[derive(Debug)]
enum SalaryRange<SRange> {
Low(SRange),
Mid(SRange),
High(SRange),
}
fn main() {
let user1 = User {
email: String::from("test@email.com"),
username: String::from("test_name"),
active: true,
sign_in_count: 1,
income: Income {
salary_range: (
SalaryRange::High("So High")
)
},
};
let mut srange: SalaryRange<&str> = user1.income.salary_range;
println!("{:?}", srange);
}
此example 的链接可在此处找到。
只是想知道是否有可能将该枚举中的值读取并打印为println!("{:?}", srange::High);,只是为了打印出字符串值?
我只想打印值So High。
如果我使用srange::High 这将抛出一个错误提示
println!("{:?}", srange::High);
| ^^^^^^ use of undeclared type or module `srange`
error: aborting due to previous error
【问题讨论】:
-
不清楚你在问什么。你打算
println!("{:?}", srange::High);输出什么? -
@PeterHall 更新只想打印
So High。 -
我知道这不是你要问的,但你有一些非常可疑的变量命名可能会引起混淆。在
SalaryRange<SRange>中,SRange是一个类型变量。但它的名称与您为String创建的别名相同。在我的回答中,我将其重命名为S以避免混淆。 -
@PeterHall 是的,很抱歉造成混乱,它的真实类型是复杂的,添加 String 仅用于示例,谢谢
-
字符串不是问题。当你看定义的时候,你可能会错误地认为
Salary::Low持有的数据类型是SRange。但实际上类型可以是您决定的任何类型。从另一个角度来看,SRange类型变量 正在遮蔽SRange具体类型。