@를 사용한 바인딩
캡처하고 테스트하기
@를 사용한 바인딩은(는) CoddyKit의 무료 Learn Rust Coding 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn Rust Coding 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
The @ Binding Operator
The @ operator lets you test a value against a pattern and bind it to a name at the same time. You get both the check and the value.
The Problem It Solves
With a range pattern you know a value fell in range, but you lose access to the specific value. @ captures it while still testing the range.
Basic @ Binding
Here we match a number in a range and keep its exact value via id.
fn main() {
let n = 5;
match n {
id @ 1..=5 => println!("got {id} in range"),
_ => println!("out of range"),
}
}Without @
Compare: a plain range arm matches but cannot name the value, so you cannot print which number matched.
fn main() {
let n = 5;
match n {
1..=5 => println!("in range (value unknown here)"),
_ => println!("out of range"),
}
}@ With Enum Data
Bind a field while also constraining it. Here we capture the id only if it falls in a valid range.
enum Message {
Hello { id: i32 },
}
fn main() {
let msg = Message::Hello { id: 7 };
match msg {
Message::Hello { id: id @ 3..=10 } => {
println!("valid id {id}");
}
Message::Hello { id } => {
println!("other id {id}");
}
}
}Binding the Whole Value
@ can also bind an entire structured value while a nested pattern checks its parts.
fn main() {
let point = (3, 4);
match point {
p @ (x, _) if x > 0 => println!("{:?} has positive x", p),
p => println!("{:?}", p),
}
}Combining with |
You can bind across alternative patterns. The name must appear in each alternative branch.
fn main() {
let code = 404;
match code {
c @ (400 | 404 | 500) => println!("error code {c}"),
c => println!("code {c}"),
}
}@ in if let
Bindings with @ work in if let too.
fn main() {
let value = Some(50);
if let Some(n @ 1..=100) = value {
println!("in range: {n}");
}
}When to Reach for @
Use @ when you need both:
- To restrict a value with a range or sub-pattern
- To use that exact value in the arm body
Without both needs, a plain binding or pattern is simpler.
Readability
The form reads as name @ pattern: bind name if it matches pattern. Keep names descriptive so the intent is clear.
Bucketing with @
A common use is sorting a value into labeled buckets while keeping the original number for reporting.
fn classify(temp: i32) -> String {
match temp {
t @ ..=0 => format!("freezing ({t})"),
t @ 1..=20 => format!("cool ({t})"),
t @ 21..=30 => format!("warm ({t})"),
t => format!("hot ({t})"),
}
}
fn main() {
println!("{}", classify(25));
}Quick Check
What does the @ operator do in a pattern like id @ 1..=5?
Recap
You learned the @ binding operator:
- It binds a value to a name while testing it against a pattern
- Solves the lost-value problem with range patterns
- Works with enum data, tuples,
|alternatives, andif let - Use it when you need both the constraint and the value
자주 묻는 질문
“@를 사용한 바인딩” 강의는 무료인가요?
네 — “@를 사용한 바인딩” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn Rust Coding 강의 전체를 잠금 해제할 수 있습니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.
“@를 사용한 바인딩”에서 뭘 배우나요?
캡처하고 테스트하기 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn Rust Coding을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn Rust Coding은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“@를 사용한 바인딩” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn Rust Coding 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn Rust Coding 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- match 심층 탐구
- if let과 while let
- @를 사용한 바인딩
- 구조 분해