Unit-like structs let you create a named type without any data inside. They are useful when you want to mark or label something clearly in your code.
Unit-like structs in Rust
Introduction
Syntax
Rust
struct Name;
Unit-like structs have no fields and end with a semicolon.
They behave like empty types but have a distinct name.
Examples
Marker.Rust
struct Marker;
Rust
struct EmptyType;
Rust
fn main() {
let _m = Marker;
}
Sample Program
This program defines a unit-like struct Logger and implements a method log for it. Then it creates an instance and calls the method.
Rust
struct Logger;
impl Logger {
fn log(&self) {
println!("Logging from Logger unit-like struct.");
}
}
fn main() {
let logger = Logger;
logger.log();
}Important Notes
Unit-like structs are zero-sized types, so they take no space in memory.
You can implement traits and methods on unit-like structs just like normal structs.
Summary
Unit-like structs are structs without fields, used as markers or labels.
They are created with struct Name; syntax.
You can add methods and traits to them even though they hold no data.
Practice
1. What is a unit-like struct in Rust?
easy
Solution
Step 1: Understand struct definitions
Structs in Rust can have fields or no fields. A unit-like struct has no fields.Step 2: Identify the purpose of unit-like structs
They are used as markers or labels without storing data.Final Answer:
A struct without any fields, used as a marker. -> Option DQuick Check:
Unit-like struct = marker struct [OK]
Hint: No fields means unit-like struct, used as marker [OK]
Common Mistakes:
- Thinking unit-like structs must have fields
- Confusing unit-like structs with tuple structs
- Assuming unit-like structs hold unit type values
2. Which of the following is the correct syntax to declare a unit-like struct named
Marker in Rust?easy
Solution
Step 1: Recall unit-like struct syntax
Unit-like structs are declared with just the name and a semicolon, no parentheses or braces.Step 2: Compare options
struct Marker; matches the syntax:struct Marker;Final Answer:
struct Marker; -> Option AQuick Check:
Unit-like struct syntax = struct Name; [OK]
Hint: Unit-like struct ends with semicolon, no braces [OK]
Common Mistakes:
- Using parentheses like tuple structs
- Using braces like normal structs
- Adding square brackets which are invalid
3. What will be the output of this Rust code?
struct Flag;
impl Flag {
fn is_set(&self) -> bool {
true
}
}
fn main() {
let f = Flag;
println!("{}", f.is_set());
}medium
Solution
Step 1: Understand the struct and method
Flag is a unit-like struct with a methodis_setthat always returns true.Step 2: Trace the main function
We create an instancefof Flag and callf.is_set(), which returns true, printed as "true".Final Answer:
true -> Option BQuick Check:
Method returns true, output is true [OK]
Hint: Unit-like structs can have methods returning values [OK]
Common Mistakes:
- Expecting a compilation error due to no fields
- Thinking unit-like structs cannot have methods
- Confusing output with false or panic
4. Identify the error in this Rust code using a unit-like struct:
struct Label;
fn main() {
let l = Label();
println!("Label created");
}medium
Solution
Step 1: Check struct instantiation
Unit-like structs are instantiated without parentheses, just by name.Step 2: Identify the error
The code usesLabel()which is invalid; it should beLabel.Final Answer:
Unit-like structs cannot be instantiated with parentheses. -> Option CQuick Check:
Instantiate unit-like struct without () [OK]
Hint: Instantiate unit-like structs by name only, no () [OK]
Common Mistakes:
- Adding parentheses when creating unit-like struct instances
- Forgetting semicolon after struct declaration (not in this code)
- Misusing println! macro syntax
5. Given this code, what is the output?
struct Marker;
impl Marker {
fn label(&self) -> &'static str {
"Unit Marker"
}
}
fn main() {
let markers = vec![Marker, Marker];
for m in markers {
println!("{}", m.label());
}
}hard
Solution
Step 1: Understand vector of unit-like structs
Unit-like structs can be stored in vectors as they are zero-sized but valid types.Step 2: Trace the loop and method calls
The loop prints the label for each Marker instance, which returns "Unit Marker" twice.Final Answer:
Unit Marker\nUnit Marker -> Option AQuick Check:
Two markers print label twice [OK]
Hint: Unit-like structs can be stored and iterated like normal structs [OK]
Common Mistakes:
- Assuming unit-like structs cannot be stored in collections
- Expecting compilation error due to zero-sized type
- Thinking only one print occurs
Recommended
Ready to prove it?
Pass the test and this pattern moves unknown
10 questions ~5 mineasy hard
