Compile error in enums code
Opened this issue · 1 comments
MarcSeebold commented
In https://github.com/nrc/r4cppp/blob/master/data-types.md you write:
enum Expr {
Add(i32, i32),
Or(bool, bool),
Lit(i32)
}
fn foo() {
let x = Or(true, false); // x has type Expr
}
This code throws the following errors:
error[E0425]: cannot find function, tuple struct or tuple variant 'Or' in this scope
--> enums.rs:10:13
|
10 | let x = Or(true, false); // x has type Expr
| ^^
|
help: a tuple variant with a similar name exists
|
10 | let x = Ok(true, false); // x has type Expr
| ^^
help: possible candidate is found in another module, you can import it into scope
|
1 | use Expr::Or;
|
error: aborting due to previous error
For more information about this error, try 'rustc --explain E0425'..
rustc 1.42.0 (b8cedc004 2020-03-09)
Fix: Add namespace
let x = Expr::Or(true, false)
Same on the snippet below:
fn bar(e: Expr) {
match e {
Add(x, y) => println!("An `Add` variant: {} + {}", x, y),
Or(..) => println!("An `Or` variant"),
_ => println!("Something else (in this case, a `Lit`)"),
}
}
Same fix. Alternative:
use Expr::Add;
use Expr::Or;
nrc commented
Using the explicit prefix is the idiomatic fix - this example is so old that it uses the old enum rules!