Rust: μœ ν˜• 좔둠은 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” λ³€μˆ˜ `__next`에 λŒ€ν•œ μˆ˜μ •μ„ μ œμ•ˆν•©λ‹ˆλ‹€.

에 λ§Œλ“  2018λ…„ 05μ›” 28일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: rust-lang/rust

이 μ½”λ“œ: ( ν”Œλ ˆμ΄κ·ΈλΌμš΄λ“œ 링크 )

fn main() {
    let tiles = Default::default();
    for row in &mut tiles {
        for tile in row {
            *tile = 0;
        }
    }

    let tiles: [[usize; 3]; 3] = tiles;
}

λ‹€μŒ 였λ₯˜μ™€ ν•¨κ»˜ μ‹€νŒ¨ν•©λ‹ˆλ‹€.

error[E0282]: type annotations needed
 --> src/main.rs:5:13
  |
4 |         for tile in row {
  |             ---- consider giving `__next` a type
5 |             *tile = 0;
  |             ^^^^^ cannot infer type for `_`

이 μ½”λ“œμ—μ„œλŠ” ν˜•μ‹ μœ μΆ”(μ •ν™•ν•˜κ²Œ)κ°€ μ‹€νŒ¨ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μˆ˜μ •μ„ μ œμ•ˆν•˜λŠ” λ³€μˆ˜λŠ” __next 이며 μ‹€μ œλ‘œ λ‚΄ μ½”λ“œμ— μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ»΄νŒŒμΌλŸ¬μ—μ„œ μƒμ„±ν•œ λ‚΄λΆ€ λ³€μˆ˜μΌ 수 μžˆμŠ΅λ‹ˆλ‹€.

A-diagnostics C-bug

λͺ¨λ“  3 λŒ“κΈ€

음, 이 경우 λ³€μˆ˜μ˜ 이름을 μ§€μ •ν•˜μ§€ μ•ŠλŠ” 것은 μΆ©λΆ„νžˆ 간단할 κ²ƒμž…λ‹ˆλ‹€.

diff --git a/src/librustc/infer/error_reporting/need_type_info.rs b/src/librustc/infer/error_reporting/need_type_info.rs
index 7352c14..25bfb3e 100644
--- a/src/librustc/infer/error_reporting/need_type_info.rs
+++ b/src/librustc/infer/error_reporting/need_type_info.rs
@@ -131,7 +131,10 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
             labels.clear();
             labels.push((pattern.span, format!("consider giving this closure parameter a type")));
         } else if let Some(pattern) = local_visitor.found_local_pattern {
-            if let Some(simple_name) = pattern.simple_name() {
+            // don't put internal desugared-loop identifier in user-facing
+            // message (Issue #51116)
+            let simple_name = pattern.simple_name().filter(|n| n.as_str() != "__next");
+            if let Some(simple_name) = simple_name {
                 labels.push((pattern.span, format!("consider giving `{}` a type", simple_name)));
             } else {
                 labels.push((pattern.span, format!("consider giving the pattern a type")));

κ·ΈλŸ¬λ‚˜ 더 근본적으둜 이것은 루프에 μ„€μ •ν•˜κΈ°μ— 쒋은 λ ˆμ΄λΈ”μ΄ μ•„λ‹™λ‹ˆλ‹€. 루프 λ³€μˆ˜μ— μœ ν˜• 주석을 μΆ”κ°€ν•˜λŠ” ꡬ문이 μ—†μŠ΅λ‹ˆλ‹€.

__next λŠ” 섀탕 μ œκ±°μ—μ„œ λ‚˜μ˜΅λ‹ˆλ‹€.

https://github.com/rust-lang/rust/blob/5ae5361cdd7b4e518d6733fb726521563d5b4cfa/src/librustc/hir/lowering.rs#L3355 -L3501

κ·ΈλŸ¬λ‚˜ 더 근본적으둜 이것은 루프에 μ„€μ •ν•˜κΈ°μ— 쒋은 λ ˆμ΄λΈ”μ΄ μ•„λ‹™λ‹ˆλ‹€. 루프 λ³€μˆ˜μ— μœ ν˜• 주석을 μΆ”κ°€ν•˜λŠ” ꡬ문이 μ—†μŠ΅λ‹ˆλ‹€.

λ™μ˜ν•©λ‹ˆλ‹€. 이 경우λ₯Ό 확인해야 ν•©λ‹ˆλ‹€.

#52418μ—μ„œ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰