| msgid "" |
| msgstr "" |
| "Project-Id-Version: Rust By Example\n" |
| "POT-Creation-Date: 2026-01-13T13:46:42+09:00\n" |
| "PO-Revision-Date: 2026-01-13 13:46+0900\n" |
| "Last-Translator: ehottl <deepthought@postech.ac.kr>\n" |
| "Language-Team: Korean <translation-team-ko@googlegroups.com>\n" |
| "Language: ko\n" |
| "MIME-Version: 1.0\n" |
| "Content-Type: text/plain; charset=UTF-8\n" |
| "Content-Transfer-Encoding: 8bit\n" |
| "Plural-Forms: nplurals=1; plural=0;\n" |
| |
| #: src/SUMMARY.md:1 |
| msgid "Summary" |
| msgstr "요약" |
| |
| #: src/SUMMARY.md:3 |
| msgid "Introduction" |
| msgstr "소개" |
| |
| #: src/SUMMARY.md:5 src/hello.md:1 |
| msgid "Hello World" |
| msgstr "Hello World" |
| |
| #: src/SUMMARY.md:6 src/hello/comment.md:1 |
| msgid "Comments" |
| msgstr "주석" |
| |
| #: src/SUMMARY.md:7 src/hello/print.md:1 |
| msgid "Formatted print" |
| msgstr "형식화된 출력" |
| |
| #: src/SUMMARY.md:8 src/hello/print/print_debug.md:1 |
| msgid "Debug" |
| msgstr "디버그" |
| |
| #: src/SUMMARY.md:9 src/hello/print/print_display.md:1 |
| msgid "Display" |
| msgstr "디스플레이" |
| |
| #: src/SUMMARY.md:10 src/hello/print/print_display/testcase_list.md:1 |
| msgid "Testcase: List" |
| msgstr "테스트케이스: 리스트" |
| |
| #: src/SUMMARY.md:11 src/hello/print/fmt.md:1 |
| msgid "Formatting" |
| msgstr "형식화" |
| |
| #: src/SUMMARY.md:13 src/primitives.md:1 |
| msgid "Primitives" |
| msgstr "기본 자료형" |
| |
| #: src/SUMMARY.md:14 src/primitives/literals.md:1 |
| msgid "Literals and operators" |
| msgstr "리터럴과 연산자" |
| |
| #: src/SUMMARY.md:15 src/primitives/tuples.md:1 |
| msgid "Tuples" |
| msgstr "튜플" |
| |
| #: src/SUMMARY.md:16 src/primitives/array.md:1 |
| msgid "Arrays and Slices" |
| msgstr "배열과 슬라이스" |
| |
| #: src/SUMMARY.md:18 src/custom_types.md:1 |
| msgid "Custom Types" |
| msgstr "사용자 정의 타입" |
| |
| #: src/SUMMARY.md:19 src/custom_types/structs.md:1 |
| msgid "Structures" |
| msgstr "구조체" |
| |
| #: src/SUMMARY.md:20 src/custom_types/enum.md:1 |
| msgid "Enums" |
| msgstr "열거형" |
| |
| #: src/SUMMARY.md:21 src/custom_types/enum/enum_use.md:1 |
| msgid "use" |
| msgstr "use" |
| |
| #: src/SUMMARY.md:22 src/custom_types/enum/c_like.md:1 |
| msgid "C-like" |
| msgstr "C-like" |
| |
| #: src/SUMMARY.md:23 src/custom_types/enum/testcase_linked_list.md:1 |
| msgid "Testcase: linked-list" |
| msgstr "테스트케이스: 연결 리스트" |
| |
| #: src/SUMMARY.md:24 src/custom_types/constants.md:1 |
| msgid "constants" |
| msgstr "상수" |
| |
| #: src/SUMMARY.md:26 src/variable_bindings.md:1 |
| msgid "Variable Bindings" |
| msgstr "변수 바인딩" |
| |
| #: src/SUMMARY.md:27 src/SUMMARY.md:120 src/SUMMARY.md:123 |
| #: src/variable_bindings/mut.md:1 src/scope/move/mut.md:1 |
| #: src/scope/borrow/mut.md:1 |
| msgid "Mutability" |
| msgstr "가변성" |
| |
| #: src/SUMMARY.md:28 src/variable_bindings/scope.md:1 |
| msgid "Scope and Shadowing" |
| msgstr "스코프와 섀도잉" |
| |
| #: src/SUMMARY.md:29 src/variable_bindings/declare.md:1 |
| msgid "Declare first" |
| msgstr "선언 우선" |
| |
| #: src/SUMMARY.md:30 src/variable_bindings/freeze.md:1 |
| msgid "Freezing" |
| msgstr "동결" |
| |
| #: src/SUMMARY.md:32 src/types.md:1 |
| msgid "Types" |
| msgstr "타입" |
| |
| #: src/SUMMARY.md:33 src/types/cast.md:1 |
| msgid "Casting" |
| msgstr "형변환" |
| |
| #: src/SUMMARY.md:34 src/types/literals.md:1 |
| msgid "Literals" |
| msgstr "리터럴" |
| |
| #: src/SUMMARY.md:35 src/types/inference.md:1 |
| msgid "Inference" |
| msgstr "추론" |
| |
| #: src/SUMMARY.md:36 src/SUMMARY.md:124 src/types/alias.md:1 |
| #: src/scope/borrow/alias.md:1 |
| msgid "Aliasing" |
| msgstr "별칭" |
| |
| #: src/SUMMARY.md:38 src/conversion.md:1 |
| msgid "Conversion" |
| msgstr "타입 변환" |
| |
| #: src/SUMMARY.md:39 src/conversion/from_into.md:1 |
| msgid "`From` and `Into`" |
| msgstr "`From`과 `Into`" |
| |
| #: src/SUMMARY.md:40 src/conversion/try_from_try_into.md:1 |
| msgid "`TryFrom` and `TryInto`" |
| msgstr "`TryFrom`과 `TryInto`" |
| |
| #: src/SUMMARY.md:41 |
| msgid "To and from `String`s" |
| msgstr "`String` 변환" |
| |
| #: src/SUMMARY.md:43 src/expression.md:1 |
| msgid "Expressions" |
| msgstr "표현식" |
| |
| #: src/SUMMARY.md:45 src/flow_control.md:1 |
| msgid "Flow of Control" |
| msgstr "제어 흐름" |
| |
| #: src/SUMMARY.md:46 src/flow_control/if_else.md:1 |
| msgid "if/else" |
| msgstr "if/else" |
| |
| #: src/SUMMARY.md:47 src/flow_control/loop.md:1 |
| msgid "loop" |
| msgstr "loop" |
| |
| #: src/SUMMARY.md:48 src/flow_control/loop/nested.md:1 |
| msgid "Nesting and labels" |
| msgstr "중첩과 레이블" |
| |
| #: src/SUMMARY.md:49 src/flow_control/loop/return.md:1 |
| msgid "Returning from loops" |
| msgstr "반복문에서 리턴하기" |
| |
| #: src/SUMMARY.md:50 src/flow_control/while.md:1 |
| msgid "while" |
| msgstr "while" |
| |
| #: src/SUMMARY.md:51 src/flow_control/for.md:3 |
| msgid "for and range" |
| msgstr "for와 range" |
| |
| #: src/SUMMARY.md:52 src/flow_control/match.md:1 |
| msgid "match" |
| msgstr "match" |
| |
| #: src/SUMMARY.md:53 src/flow_control/match/destructuring.md:1 |
| msgid "Destructuring" |
| msgstr "구조 분해" |
| |
| #: src/SUMMARY.md:54 |
| #: src/flow_control/match/destructuring/destructure_tuple.md:1 |
| msgid "tuples" |
| msgstr "튜플" |
| |
| #: src/SUMMARY.md:55 |
| #: src/flow_control/match/destructuring/destructure_slice.md:1 |
| msgid "arrays/slices" |
| msgstr "배열/슬라이스" |
| |
| #: src/SUMMARY.md:56 src/flow_control/match/destructuring/destructure_enum.md:1 |
| msgid "enums" |
| msgstr "열거형" |
| |
| #: src/SUMMARY.md:57 |
| #: src/flow_control/match/destructuring/destructure_pointers.md:1 |
| msgid "pointers/ref" |
| msgstr "포인터/ref" |
| |
| #: src/SUMMARY.md:58 |
| #: src/flow_control/match/destructuring/destructure_structures.md:1 |
| msgid "structs" |
| msgstr "구조체" |
| |
| #: src/SUMMARY.md:59 src/flow_control/match/guard.md:1 |
| msgid "Guards" |
| msgstr "가드" |
| |
| #: src/SUMMARY.md:60 src/flow_control/match/binding.md:1 |
| msgid "Binding" |
| msgstr "바인딩" |
| |
| #: src/SUMMARY.md:61 src/flow_control/if_let.md:1 |
| msgid "if let" |
| msgstr "if let" |
| |
| #: src/SUMMARY.md:62 src/flow_control/let_else.md:1 |
| msgid "let-else" |
| msgstr "let-else" |
| |
| #: src/SUMMARY.md:63 src/flow_control/while_let.md:1 |
| msgid "while let" |
| msgstr "while let" |
| |
| #: src/SUMMARY.md:65 src/SUMMARY.md:103 src/SUMMARY.md:128 src/fn.md:1 |
| #: src/generics/gen_fn.md:1 src/scope/lifetime/fn.md:1 |
| msgid "Functions" |
| msgstr "함수" |
| |
| #: src/SUMMARY.md:66 src/SUMMARY.md:129 src/scope/lifetime/methods.md:1 |
| msgid "Methods" |
| msgstr "메서드" |
| |
| #: src/SUMMARY.md:67 src/fn/closures.md:1 |
| msgid "Closures" |
| msgstr "클로저" |
| |
| #: src/SUMMARY.md:68 src/fn/closures/capture.md:1 |
| msgid "Capturing" |
| msgstr "캡처" |
| |
| #: src/SUMMARY.md:69 src/fn/closures/input_parameters.md:1 |
| msgid "As input parameters" |
| msgstr "입력 파라미터로 사용" |
| |
| #: src/SUMMARY.md:70 src/fn/closures/anonymity.md:1 |
| msgid "Type anonymity" |
| msgstr "타입 익명성" |
| |
| #: src/SUMMARY.md:71 src/fn/closures/input_functions.md:1 |
| msgid "Input functions" |
| msgstr "입력 함수" |
| |
| #: src/SUMMARY.md:72 src/fn/closures/output_parameters.md:1 |
| msgid "As output parameters" |
| msgstr "출력 파라미터로 사용" |
| |
| #: src/SUMMARY.md:73 src/fn/closures/closure_examples.md:1 |
| msgid "Examples in `std`" |
| msgstr "`std` 예제" |
| |
| #: src/SUMMARY.md:74 src/fn/closures/closure_examples/iter_any.md:1 |
| msgid "Iterator::any" |
| msgstr "Iterator::any" |
| |
| #: src/SUMMARY.md:75 src/fn/closures/closure_examples/iter_find.md:1 |
| msgid "Searching through iterators" |
| msgstr "이터레이터 검색" |
| |
| #: src/SUMMARY.md:76 src/fn/hof.md:1 |
| msgid "Higher Order Functions" |
| msgstr "고차 함수" |
| |
| #: src/SUMMARY.md:77 src/fn/diverging.md:1 |
| msgid "Diverging functions" |
| msgstr "발산 함수" |
| |
| #: src/SUMMARY.md:79 src/mod.md:1 |
| msgid "Modules" |
| msgstr "모듈" |
| |
| #: src/SUMMARY.md:80 src/mod/visibility.md:1 |
| msgid "Visibility" |
| msgstr "가시성" |
| |
| #: src/SUMMARY.md:81 src/mod/struct_visibility.md:1 |
| msgid "Struct visibility" |
| msgstr "구조체 가시성" |
| |
| #: src/SUMMARY.md:82 src/mod/use.md:1 |
| msgid "The `use` declaration" |
| msgstr "`use` 선언" |
| |
| #: src/SUMMARY.md:83 src/mod/super.md:1 |
| msgid "`super` and `self`" |
| msgstr "`super`와 `self`" |
| |
| #: src/SUMMARY.md:84 src/mod/split.md:1 |
| msgid "File hierarchy" |
| msgstr "파일 계층 구조" |
| |
| #: src/SUMMARY.md:86 src/SUMMARY.md:98 src/crates.md:1 src/attribute/crate.md:1 |
| #: src/std_misc/arg.md:30 |
| msgid "Crates" |
| msgstr "크레이트" |
| |
| #: src/SUMMARY.md:87 src/crates/lib.md:1 |
| msgid "Creating a Library" |
| msgstr "라이브러리 생성" |
| |
| #: src/SUMMARY.md:88 src/crates/using_lib.md:1 |
| msgid "Using a Library" |
| msgstr "라이브러리 사용" |
| |
| #: src/SUMMARY.md:90 src/cargo.md:1 |
| msgid "Cargo" |
| msgstr "카고" |
| |
| #: src/SUMMARY.md:91 src/cargo/deps.md:1 |
| msgid "Dependencies" |
| msgstr "의존성" |
| |
| #: src/SUMMARY.md:92 src/cargo/conventions.md:1 |
| msgid "Conventions" |
| msgstr "관례" |
| |
| #: src/SUMMARY.md:93 |
| msgid "Tests" |
| msgstr "테스트" |
| |
| #: src/SUMMARY.md:94 src/cargo/build_scripts.md:1 |
| msgid "Build Scripts" |
| msgstr "빌드 스크립트" |
| |
| #: src/SUMMARY.md:96 src/attribute.md:1 |
| msgid "Attributes" |
| msgstr "속성" |
| |
| #: src/SUMMARY.md:97 src/attribute/unused.md:1 |
| msgid "`dead_code`" |
| msgstr "`dead_code`" |
| |
| #: src/SUMMARY.md:99 src/attribute/cfg.md:1 |
| msgid "`cfg`" |
| msgstr "`cfg`" |
| |
| #: src/SUMMARY.md:100 src/attribute/cfg/custom.md:1 |
| msgid "Custom" |
| msgstr "사용자 정의" |
| |
| #: src/SUMMARY.md:102 src/generics.md:1 |
| msgid "Generics" |
| msgstr "제네릭" |
| |
| #: src/SUMMARY.md:104 src/generics/impl.md:1 |
| msgid "Implementation" |
| msgstr "구현" |
| |
| #: src/SUMMARY.md:105 src/SUMMARY.md:131 src/SUMMARY.md:137 |
| #: src/generics/gen_trait.md:1 src/scope/lifetime/trait.md:1 src/trait.md:1 |
| msgid "Traits" |
| msgstr "트레이트" |
| |
| #: src/SUMMARY.md:106 src/SUMMARY.md:132 src/generics/bounds.md:1 |
| #: src/scope/lifetime/lifetime_bounds.md:1 |
| msgid "Bounds" |
| msgstr "바운드" |
| |
| #: src/SUMMARY.md:107 src/generics/bounds/testcase_empty.md:1 |
| msgid "Testcase: empty bounds" |
| msgstr "테스트케이스: 빈 바운드" |
| |
| #: src/SUMMARY.md:108 src/generics/multi_bounds.md:1 |
| msgid "Multiple bounds" |
| msgstr "다중 바운드" |
| |
| #: src/SUMMARY.md:109 src/generics/where.md:1 |
| msgid "Where clauses" |
| msgstr "Where 절" |
| |
| #: src/SUMMARY.md:110 src/generics/new_types.md:1 |
| msgid "New Type Idiom" |
| msgstr "New Type 관용구" |
| |
| #: src/SUMMARY.md:111 src/generics/assoc_items.md:1 |
| msgid "Associated items" |
| msgstr "연관 아이템" |
| |
| #: src/SUMMARY.md:112 src/generics/assoc_items/the_problem.md:1 |
| msgid "The Problem" |
| msgstr "문제점" |
| |
| #: src/SUMMARY.md:113 src/generics/assoc_items/types.md:1 |
| msgid "Associated types" |
| msgstr "연관 타입" |
| |
| #: src/SUMMARY.md:114 src/generics/phantom.md:1 |
| msgid "Phantom type parameters" |
| msgstr "팬텀 타입 파라미터" |
| |
| #: src/SUMMARY.md:115 src/generics/phantom/testcase_units.md:1 |
| msgid "Testcase: unit clarification" |
| msgstr "테스트케이스: 단위 명확화" |
| |
| #: src/SUMMARY.md:117 src/scope.md:1 |
| msgid "Scoping rules" |
| msgstr "스코프 규칙" |
| |
| #: src/SUMMARY.md:118 src/scope/raii.md:1 |
| msgid "RAII" |
| msgstr "RAII" |
| |
| #: src/SUMMARY.md:119 src/scope/move.md:1 |
| msgid "Ownership and moves" |
| msgstr "소유권과 이동" |
| |
| #: src/SUMMARY.md:121 src/scope/move/partial_move.md:1 |
| msgid "Partial moves" |
| msgstr "부분 이동" |
| |
| #: src/SUMMARY.md:122 src/scope/borrow.md:1 |
| msgid "Borrowing" |
| msgstr "빌림" |
| |
| #: src/SUMMARY.md:125 src/scope/borrow/ref.md:1 |
| msgid "The ref pattern" |
| msgstr "ref 패턴" |
| |
| #: src/SUMMARY.md:126 src/scope/lifetime.md:1 |
| msgid "Lifetimes" |
| msgstr "라이프타임" |
| |
| #: src/SUMMARY.md:127 src/scope/lifetime/explicit.md:1 |
| msgid "Explicit annotation" |
| msgstr "명시적 어노테이션" |
| |
| #: src/SUMMARY.md:130 src/scope/lifetime/struct.md:1 |
| msgid "Structs" |
| msgstr "구조체" |
| |
| #: src/SUMMARY.md:133 src/scope/lifetime/lifetime_coercion.md:1 |
| msgid "Coercion" |
| msgstr "강제" |
| |
| #: src/SUMMARY.md:134 src/scope/lifetime/static_lifetime.md:1 |
| msgid "Static" |
| msgstr "Static" |
| |
| #: src/SUMMARY.md:135 src/scope/lifetime/elision.md:1 |
| msgid "Elision" |
| msgstr "생략" |
| |
| #: src/SUMMARY.md:138 src/trait/derive.md:1 |
| msgid "Derive" |
| msgstr "Derive" |
| |
| #: src/SUMMARY.md:139 src/trait/dyn.md:1 |
| msgid "Returning Traits with `dyn`" |
| msgstr "`dyn`으로 트레이트 반환하기" |
| |
| #: src/SUMMARY.md:140 src/trait/ops.md:1 |
| msgid "Operator Overloading" |
| msgstr "연산자 오버로딩" |
| |
| #: src/SUMMARY.md:141 src/trait/drop.md:1 |
| msgid "Drop" |
| msgstr "Drop" |
| |
| #: src/SUMMARY.md:142 src/trait/iter.md:1 |
| msgid "Iterators" |
| msgstr "이터레이터" |
| |
| #: src/SUMMARY.md:143 src/trait/impl_trait.md:1 |
| msgid "`impl Trait`" |
| msgstr "`impl Trait`" |
| |
| #: src/SUMMARY.md:144 src/trait/clone.md:1 |
| msgid "Clone" |
| msgstr "Clone" |
| |
| #: src/SUMMARY.md:145 src/trait/supertraits.md:1 |
| msgid "Supertraits" |
| msgstr "슈퍼트레이트" |
| |
| #: src/SUMMARY.md:146 src/trait/disambiguating.md:1 |
| msgid "Disambiguating overlapping traits" |
| msgstr "중복 트레이트 명확화" |
| |
| #: src/SUMMARY.md:148 |
| msgid "macro_rules!" |
| msgstr "macro_rules!" |
| |
| #: src/SUMMARY.md:149 src/macros/syntax.md:1 |
| msgid "Syntax" |
| msgstr "문법" |
| |
| #: src/SUMMARY.md:150 src/macros/designators.md:1 |
| msgid "Designators" |
| msgstr "지시자" |
| |
| #: src/SUMMARY.md:151 src/macros/overload.md:1 |
| msgid "Overload" |
| msgstr "오버로드" |
| |
| #: src/SUMMARY.md:152 src/macros/repeat.md:1 |
| msgid "Repeat" |
| msgstr "반복" |
| |
| #: src/SUMMARY.md:153 src/macros/dry.md:1 |
| msgid "DRY (Don't Repeat Yourself)" |
| msgstr "DRY (반복하지 말라)" |
| |
| #: src/SUMMARY.md:154 |
| msgid "DSL (Domain Specific Languages)" |
| msgstr "DSL (도메인 특화 언어)" |
| |
| #: src/SUMMARY.md:155 |
| msgid "Variadics" |
| msgstr "가변 인자" |
| |
| #: src/SUMMARY.md:157 src/error.md:1 |
| msgid "Error handling" |
| msgstr "에러 핸들링" |
| |
| #: src/SUMMARY.md:158 src/error/panic.md:1 |
| msgid "`panic`" |
| msgstr "`panic`" |
| |
| #: src/SUMMARY.md:159 |
| msgid "`abort` & `unwind`" |
| msgstr "`abort`와 `unwind`" |
| |
| #: src/SUMMARY.md:160 src/error/option_unwrap.md:1 |
| msgid "`Option` & `unwrap`" |
| msgstr "`Option`과 `unwrap`" |
| |
| #: src/SUMMARY.md:161 src/error/option_unwrap/question_mark.md:1 |
| msgid "Unpacking options with `?`" |
| msgstr "`?`로 옵션 풀기" |
| |
| #: src/SUMMARY.md:162 src/error/option_unwrap/map.md:1 |
| msgid "Combinators: `map`" |
| msgstr "콤비네이터: `map`" |
| |
| #: src/SUMMARY.md:163 src/error/option_unwrap/and_then.md:1 |
| msgid "Combinators: `and_then`" |
| msgstr "콤비네이터: `and_then`" |
| |
| #: src/SUMMARY.md:164 |
| msgid "Defaults: `or`, `or_else`, `get_or_insert`, `get_or_insert_with`" |
| msgstr "기본값: `or`, `or_else`, `get_or_insert`, `get_or_insert_with`" |
| |
| #: src/SUMMARY.md:165 src/SUMMARY.md:183 src/error/result.md:1 |
| #: src/std/result.md:1 |
| msgid "`Result`" |
| msgstr "`Result`" |
| |
| #: src/SUMMARY.md:166 src/error/result/result_map.md:1 |
| msgid "`map` for `Result`" |
| msgstr "`Result`에서의 `map`" |
| |
| #: src/SUMMARY.md:167 src/error/result/result_alias.md:1 |
| msgid "aliases for `Result`" |
| msgstr "`Result`의 별칭" |
| |
| #: src/SUMMARY.md:168 src/error/result/early_returns.md:1 |
| msgid "Early returns" |
| msgstr "조기 리턴" |
| |
| #: src/SUMMARY.md:169 src/error/result/enter_question_mark.md:1 |
| msgid "Introducing `?`" |
| msgstr "`?` 소개" |
| |
| #: src/SUMMARY.md:170 src/error/multiple_error_types.md:1 |
| msgid "Multiple error types" |
| msgstr "여러 에러 타입" |
| |
| #: src/SUMMARY.md:171 src/error/multiple_error_types/option_result.md:1 |
| msgid "Pulling `Result`s out of `Option`s" |
| msgstr "`Option`에서 `Result` 꺼내기" |
| |
| #: src/SUMMARY.md:172 src/error/multiple_error_types/define_error_type.md:1 |
| msgid "Defining an error type" |
| msgstr "에러 타입 정의하기" |
| |
| #: src/SUMMARY.md:173 src/error/multiple_error_types/boxing_errors.md:1 |
| msgid "`Box`ing errors" |
| msgstr "에러 `Box`하기" |
| |
| #: src/SUMMARY.md:174 src/error/multiple_error_types/reenter_question_mark.md:1 |
| msgid "Other uses of `?`" |
| msgstr "`?`의 다른 용도" |
| |
| #: src/SUMMARY.md:175 src/error/multiple_error_types/wrap_error.md:1 |
| msgid "Wrapping errors" |
| msgstr "에러 감싸기" |
| |
| #: src/SUMMARY.md:176 src/error/iter_result.md:1 |
| msgid "Iterating over `Result`s" |
| msgstr "`Result` 반복하기" |
| |
| #: src/SUMMARY.md:178 src/std.md:1 |
| msgid "Std library types" |
| msgstr "표준 라이브러리 타입" |
| |
| #: src/SUMMARY.md:179 src/std/box.md:1 |
| msgid "Box, stack and heap" |
| msgstr "Box, 스택과 힙" |
| |
| #: src/SUMMARY.md:180 src/std/vec.md:1 |
| msgid "Vectors" |
| msgstr "벡터" |
| |
| #: src/SUMMARY.md:181 src/std/str.md:1 |
| msgid "Strings" |
| msgstr "문자열" |
| |
| #: src/SUMMARY.md:182 src/std/option.md:1 |
| msgid "`Option`" |
| msgstr "`Option`" |
| |
| #: src/SUMMARY.md:184 src/std/result/question_mark.md:1 |
| msgid "`?`" |
| msgstr "`?`" |
| |
| #: src/SUMMARY.md:185 src/std/panic.md:1 |
| msgid "`panic!`" |
| msgstr "`panic!`" |
| |
| #: src/SUMMARY.md:186 src/std/hash.md:1 |
| msgid "HashMap" |
| msgstr "해시맵" |
| |
| #: src/SUMMARY.md:187 src/std/hash/alt_key_types.md:1 |
| msgid "Alternate/custom key types" |
| msgstr "대체/사용자 정의 키 타입" |
| |
| #: src/SUMMARY.md:188 src/std/hash/hashset.md:1 |
| msgid "HashSet" |
| msgstr "해시셋" |
| |
| #: src/SUMMARY.md:189 src/std/rc.md:1 |
| msgid "`Rc`" |
| msgstr "`Rc`" |
| |
| #: src/SUMMARY.md:190 |
| msgid "`Arc`" |
| msgstr "`Arc`" |
| |
| #: src/SUMMARY.md:192 src/std_misc.md:1 |
| msgid "Std misc" |
| msgstr "기타 표준 라이브러리" |
| |
| #: src/SUMMARY.md:193 src/std_misc.md:6 src/std_misc/threads.md:1 |
| msgid "Threads" |
| msgstr "스레드" |
| |
| #: src/SUMMARY.md:194 src/std_misc/threads/testcase_mapreduce.md:1 |
| msgid "Testcase: map-reduce" |
| msgstr "테스트케이스: 맵-리듀스" |
| |
| #: src/SUMMARY.md:195 src/std_misc.md:7 src/std_misc/channels.md:1 |
| msgid "Channels" |
| msgstr "채널" |
| |
| #: src/SUMMARY.md:196 src/std_misc/path.md:1 |
| msgid "Path" |
| msgstr "경로" |
| |
| #: src/SUMMARY.md:197 src/std_misc.md:8 src/std_misc/file.md:1 |
| msgid "File I/O" |
| msgstr "파일 입출력" |
| |
| #: src/SUMMARY.md:198 src/std_misc/file/open.md:1 |
| msgid "`open`" |
| msgstr "`open`" |
| |
| #: src/SUMMARY.md:199 src/std_misc/file/create.md:1 |
| msgid "`create`" |
| msgstr "`create`" |
| |
| #: src/SUMMARY.md:200 src/std_misc/file/read_lines.md:1 |
| msgid "`read_lines`" |
| msgstr "`read_lines`" |
| |
| #: src/SUMMARY.md:201 src/std_misc/process.md:1 |
| msgid "Child processes" |
| msgstr "자식 프로세스" |
| |
| #: src/SUMMARY.md:202 src/std_misc/process/pipe.md:1 |
| msgid "Pipes" |
| msgstr "파이프" |
| |
| #: src/SUMMARY.md:203 src/std_misc/process/wait.md:1 |
| msgid "Wait" |
| msgstr "대기" |
| |
| #: src/SUMMARY.md:204 src/std_misc/fs.md:1 |
| msgid "Filesystem Operations" |
| msgstr "파일시스템 연산" |
| |
| #: src/SUMMARY.md:205 src/std_misc/arg.md:1 |
| msgid "Program arguments" |
| msgstr "프로그램 인자" |
| |
| #: src/SUMMARY.md:206 src/std_misc/arg/matching.md:1 |
| msgid "Argument parsing" |
| msgstr "인자 파싱" |
| |
| #: src/SUMMARY.md:207 src/std_misc/ffi.md:1 |
| msgid "Foreign Function Interface" |
| msgstr "외부 함수 인터페이스" |
| |
| #: src/SUMMARY.md:209 src/cargo/test.md:1 src/testing.md:1 |
| msgid "Testing" |
| msgstr "테스트" |
| |
| #: src/SUMMARY.md:210 src/testing/unit_testing.md:1 |
| msgid "Unit testing" |
| msgstr "유닛 테스트" |
| |
| #: src/SUMMARY.md:211 src/testing/doc_testing.md:1 |
| msgid "Documentation testing" |
| msgstr "문서 테스트" |
| |
| #: src/SUMMARY.md:212 src/testing/integration_testing.md:1 |
| msgid "Integration testing" |
| msgstr "통합 테스트" |
| |
| #: src/SUMMARY.md:213 |
| msgid "Dev-dependencies" |
| msgstr "개발 의존성" |
| |
| #: src/SUMMARY.md:215 src/unsafe.md:1 |
| msgid "Unsafe Operations" |
| msgstr "Unsafe 연산" |
| |
| #: src/SUMMARY.md:216 src/unsafe/asm.md:1 |
| msgid "Inline assembly" |
| msgstr "인라인 어셈블리" |
| |
| #: src/SUMMARY.md:218 src/compatibility.md:1 |
| msgid "Compatibility" |
| msgstr "호환성" |
| |
| #: src/SUMMARY.md:219 src/compatibility/raw_identifiers.md:1 |
| msgid "Raw identifiers" |
| msgstr "Raw 식별자" |
| |
| #: src/SUMMARY.md:221 src/meta.md:1 |
| msgid "Meta" |
| msgstr "메타" |
| |
| #: src/SUMMARY.md:222 src/meta/doc.md:1 |
| msgid "Documentation" |
| msgstr "문서화" |
| |
| #: src/SUMMARY.md:223 src/meta/playground.md:1 |
| msgid "Playground" |
| msgstr "플레이그라운드" |
| |
| #: src/index.md:1 |
| msgid "Rust by Example" |
| msgstr "Rust by Example" |
| |
| #: src/index.md:3 |
| msgid "" |
| "[Rust](https://www.rust-lang.org/) is a modern systems programming language " |
| "focusing on safety, speed, and concurrency. It accomplishes these goals by " |
| "being memory safe without using garbage collection." |
| msgstr "" |
| "[Rust](https://www.rust-lang.org/)는 안전성, 속도, 동시성에 중점을 둔 현대적" |
| "인 시스템 프로그래밍 언어입니다. 가비지 컬렉션을 사용하지 않고도 메모리 안전" |
| "성을 확보하여 이러한 목표를 달성합니다." |
| |
| #: src/index.md:7 |
| msgid "" |
| "Rust by Example (RBE) is a collection of runnable examples that illustrate " |
| "various Rust concepts and standard libraries. To get even more out of these " |
| "examples, don't forget to [install Rust locally](https://www.rust-lang.org/" |
| "tools/install) and check out the [official docs](https://doc.rust-lang.org/" |
| "std/). Additionally for the curious, you can also [check out the source code " |
| "for this site](https://github.com/rust-lang/rust-by-example)." |
| msgstr "" |
| "Rust by Example (RBE)는 다양한 Rust 개념과 표준 라이브러리를 보여주는 실행 가" |
| "능한 예제 모음입니다. 이러한 예제를 더 잘 활용하려면 [Rust를 로컬에 설치]" |
| "(https://www.rust-lang.org/tools/install)하고 [공식 문서](https://doc.rust-" |
| "lang.org/std/)를 확인해 보세요. 또한 궁금하신 분들은 [이 사이트의 소스 코드]" |
| "(https://github.com/rust-lang/rust-by-example)도 확인하실 수 있습니다." |
| |
| #: src/index.md:12 |
| msgid "Now let's begin!" |
| msgstr "자, 이제 시작해 봅시다!" |
| |
| #: src/index.md:14 |
| msgid "[Hello World](hello.md) - Start with a traditional Hello World program." |
| msgstr "" |
| "[Hello World](hello.md) - 전통적인 Hello World 프로그램으로 시작합니다." |
| |
| #: src/index.md:16 |
| msgid "" |
| "[Primitives](primitives.md) - Learn about signed integers, unsigned integers " |
| "and other primitives." |
| msgstr "" |
| "[기본 자료형](primitives.md) - 부호 있는 정수, 부호 없는 정수 및 기타 기본 자" |
| "료형에 대해 배웁니다." |
| |
| #: src/index.md:18 |
| msgid "[Custom Types](custom_types.md) - `struct` and `enum`." |
| msgstr "[사용자 정의 타입](custom_types.md) - `struct`와 `enum`." |
| |
| #: src/index.md:20 |
| msgid "" |
| "[Variable Bindings](variable_bindings.md) - mutable bindings, scope, " |
| "shadowing." |
| msgstr "[변수 바인딩](variable_bindings.md) - 가변 바인딩, 스코프, 섀도잉." |
| |
| #: src/index.md:22 |
| msgid "[Types](types.md) - Learn about changing and defining types." |
| msgstr "[타입](types.md) - 타입을 변경하고 정의하는 법을 배웁니다." |
| |
| #: src/index.md:24 |
| msgid "" |
| "[Conversion](conversion.md) - Convert between different types, such as " |
| "strings, integers, and floats." |
| msgstr "" |
| "[타입 변환](conversion.md) - 문자열, 정수, 부동 소수점 등 서로 다른 타입 간" |
| "의 변환에 대해 배웁니다." |
| |
| #: src/index.md:26 |
| msgid "" |
| "[Expressions](expression.md) - Learn about Expressions & how to use them." |
| msgstr "[표현식](expression.md) - 표현식과 그 사용법에 대해 배웁니다." |
| |
| #: src/index.md:28 |
| msgid "[Flow of Control](flow_control.md) - `if`/`else`, `for`, and others." |
| msgstr "[제어 흐름](flow_control.md) - `if`/`else`, `for` 등을 배웁니다." |
| |
| #: src/index.md:30 |
| msgid "" |
| "[Functions](fn.md) - Learn about Methods, Closures and Higher Order " |
| "Functions." |
| msgstr "[함수](fn.md) - 메서드, 클로저, 고차 함수에 대해 배웁니다." |
| |
| #: src/index.md:32 |
| msgid "[Modules](mod.md) - Organize code using modules" |
| msgstr "[모듈](mod.md) - 모듈을 사용하여 코드를 구성합니다." |
| |
| #: src/index.md:34 |
| msgid "" |
| "[Crates](crates.md) - A crate is a compilation unit in Rust. Learn to create " |
| "a library." |
| msgstr "" |
| "[크레이트](crates.md) - 크레이트는 Rust의 컴파일 단위입니다. 라이브러리를 만" |
| "드는 법을 배웁니다." |
| |
| #: src/index.md:36 |
| msgid "" |
| "[Cargo](cargo.md) - Go through some basic features of the official Rust " |
| "package management tool." |
| msgstr "" |
| "[Cargo](cargo.md) - Rust 공식 패키지 관리 도구의 기본적인 기능을 살펴봅니다." |
| |
| #: src/index.md:38 |
| msgid "" |
| "[Attributes](attribute.md) - An attribute is metadata applied to some " |
| "module, crate or item." |
| msgstr "" |
| "[속성](attribute.md) - 속성은 모듈, 크레이트 또는 아이템에 적용되는 메타데이" |
| "터입니다." |
| |
| #: src/index.md:40 |
| msgid "" |
| "[Generics](generics.md) - Learn about writing a function or data type which " |
| "can work for multiple types of arguments." |
| msgstr "" |
| "[제네릭](generics.md) - 다양한 타입의 인자에 대해 작동할 수 있는 함수나 데이" |
| "터 타입을 작성하는 법을 배웁니다." |
| |
| #: src/index.md:42 |
| msgid "" |
| "[Scoping rules](scope.md) - Scopes play an important part in ownership, " |
| "borrowing, and lifetimes." |
| msgstr "" |
| "[스코프 규칙](scope.md) - 스코프는 소유권, 빌림, 라이프타임에서 중요한 역할" |
| "을 합니다." |
| |
| #: src/index.md:44 |
| msgid "" |
| "[Traits](trait.md) - A trait is a collection of methods defined for an " |
| "unknown type: `Self`" |
| msgstr "" |
| "[트레이트](trait.md) - 트레이트는 알 수 없는 타입 `Self`에 대해 정의된 메서" |
| "드 모음입니다." |
| |
| #: src/index.md:46 |
| msgid "" |
| "[Macros](macros.md) - Macros are a way of writing code that writes other " |
| "code, which is known as metaprogramming." |
| msgstr "" |
| "[매크로](macros.md) - 매크로는 다른 코드를 작성하는 코드를 작성하는 방법으" |
| "로, 메타프로그래밍이라고도 합니다." |
| |
| #: src/index.md:48 |
| msgid "[Error handling](error.md) - Learn Rust way of handling failures." |
| msgstr "[에러 핸들링](error.md) - 실패를 처리하는 Rust의 방식을 배웁니다." |
| |
| #: src/index.md:50 |
| msgid "" |
| "[Std library types](std.md) - Learn about some custom types provided by " |
| "`std` library." |
| msgstr "" |
| "[표준 라이브러리 타입](std.md) - `std` 라이브러리에서 제공하는 몇 가지 사용" |
| "자 정의 타입에 대해 배웁니다." |
| |
| #: src/index.md:52 |
| msgid "[Std misc](std_misc.md) - More custom types for file handling, threads." |
| msgstr "" |
| "[기타 표준 라이브러리](std_misc.md) - 파일 처리, 스레드 등을 위한 추가적인 사" |
| "용자 정의 타입을 배웁니다." |
| |
| #: src/index.md:54 |
| msgid "[Testing](testing.md) - All sorts of testing in Rust." |
| msgstr "[테스트](testing.md) - Rust에서의 다양한 테스트 방식을 배웁니다." |
| |
| #: src/index.md:56 |
| msgid "" |
| "[Unsafe Operations](unsafe.md) - Learn about entering a block of unsafe " |
| "operations." |
| msgstr "[Unsafe 연산](unsafe.md) - Unsafe 연산 블록에 진입하는 법을 배웁니다." |
| |
| #: src/index.md:58 |
| msgid "" |
| "[Compatibility](compatibility.md) - Handling Rust's evolution and potential " |
| "compatibility issues." |
| msgstr "" |
| "[호환성](compatibility.md) - Rust의 발전과 잠재적인 호환성 문제를 처리하는 법" |
| "을 배웁니다." |
| |
| #: src/index.md:60 |
| msgid "[Meta](meta.md) - Documentation, Benchmarking." |
| msgstr "[메타](meta.md) - 문서화, 벤치마킹." |
| |
| #: src/hello.md:3 |
| msgid "This is the source code of the traditional Hello World program." |
| msgstr "전통적인 Hello World 프로그램의 소스 코드입니다." |
| |
| #: src/hello.md:6 |
| msgid "" |
| "// This is a comment, and is ignored by the compiler.\n" |
| "// You can test this code by clicking the \"Run\" button over there ->\n" |
| "// or if you prefer to use your keyboard, you can use the \"Ctrl + Enter\"\n" |
| "// shortcut.\n" |
| msgstr "" |
| "// 이것은 주석이며, 컴파일러에 의해 무시됩니다.\n" |
| "// 오른쪽에 있는 \"Run\" 버튼을 클릭하거나,\n" |
| "// 키보드를 사용하고 싶다면 \"Ctrl + Enter\" 단축키를 사용하여\n" |
| "// 이 코드를 테스트해 볼 수 있습니다.\n" |
| |
| #: src/hello.md:10 |
| msgid "" |
| "// This code is editable, feel free to hack it!\n" |
| "// You can always return to the original code by clicking the \"Reset\" " |
| "button ->\n" |
| msgstr "" |
| "// 이 코드는 수정 가능하므로, 자유롭게 고쳐보세요!\n" |
| "// \"Reset\" 버튼을 클릭하면 언제든지 원래 코드로 되돌릴 수 있습니다 ->\n" |
| |
| #: src/hello.md:13 |
| msgid "// This is the main function.\n" |
| msgstr "// 메인 함수입니다.\n" |
| |
| #: src/hello.md:16 |
| msgid "// Statements here are executed when the compiled binary is called.\n" |
| msgstr "// 여기에 있는 문장들은 컴파일된 바이너리가 호출될 때 실행됩니다.\n" |
| |
| #: src/hello.md:18 |
| msgid "// Print text to the console.\n" |
| msgstr "// 콘솔에 텍스트를 출력합니다.\n" |
| |
| #: src/hello.md:19 src/error/result.md:55 src/meta/playground.md:12 |
| msgid "\"Hello World!\"" |
| msgstr "\"Hello World!\"" |
| |
| #: src/hello.md:23 |
| msgid "`println!` is a [_macro_](macros.md) that prints text to the console." |
| msgstr "`println!`은 콘솔에 텍스트를 출력하는 [_매크로_](macros.md)입니다." |
| |
| #: src/hello.md:26 |
| msgid "A binary can be generated using the Rust compiler: `rustc`." |
| msgstr "Rust 컴파일러인 `rustc`를 사용하여 바이너리를 생성할 수 있습니다." |
| |
| #: src/hello.md:32 |
| msgid "`rustc` will produce a `hello` binary that can be executed." |
| msgstr "`rustc`는 실행 가능한 `hello` 바이너리를 생성합니다." |
| |
| #: src/hello.md:39 src/hello/print/print_display.md:107 |
| #: src/hello/print/print_display/testcase_list.md:53 src/hello/print/fmt.md:70 |
| #: src/primitives/tuples.md:64 src/custom_types/structs.md:89 |
| msgid "Activity" |
| msgstr "실습" |
| |
| #: src/hello.md:41 |
| msgid "" |
| "Click 'Run' above to see the expected output. Next, add a new line with a " |
| "second `println!` macro so that the output shows:" |
| msgstr "" |
| "위의 'Run'을 클릭하여 예상 출력을 확인하세요. 그런 다음, 두 번째 `println!` " |
| "매크로를 사용하여 다음과 같은 출력이 나오도록 새로운 라인을 추가하세요." |
| |
| #: src/hello/comment.md:3 |
| msgid "" |
| "Any program requires comments, and Rust supports a few different varieties:" |
| msgstr "" |
| "어떤 프로그램이든 주석이 필요하며, Rust는 몇 가지 다른 종류를 지원합니다." |
| |
| #: src/hello/comment.md:6 |
| msgid "Regular Comments" |
| msgstr "일반 주석" |
| |
| #: src/hello/comment.md:8 |
| msgid "These are ignored by the compiler:" |
| msgstr "이것들은 컴파일러에 의해 무시됩니다:" |
| |
| #: src/hello/comment.md:10 |
| msgid "**Line comments**: Start with `//` and continue to the end of the line" |
| msgstr "**라인 주석**: `//`로 시작하여 줄의 끝까지 이어집니다." |
| |
| #: src/hello/comment.md:11 |
| msgid "**Block comments**: Enclosed in `/* ... */` and can span multiple lines" |
| msgstr "**블록 주석**: `/* ... */`로 감싸여 여러 줄에 걸쳐 있을 수 있습니다." |
| |
| #: src/hello/comment.md:13 |
| msgid "" |
| "Documentation Comments (Doc Comments) which are parsed into HTML library " |
| "[documentation](../meta/doc.md):" |
| msgstr "" |
| "HTML 라이브러리 [문서](../meta/doc.md)로 파싱되는 문서화 주석 (Doc Comments):" |
| |
| #: src/hello/comment.md:15 |
| msgid "`///` - Generates docs for the item that follows it" |
| msgstr "`///` - 다음에 오는 아이템에 대한 문서를 생성합니다." |
| |
| #: src/hello/comment.md:16 |
| msgid "" |
| "`//!` - Generates docs for the enclosing item (typically used at the top of " |
| "a file or module)" |
| msgstr "" |
| "`//!` - 해당 아이템을 포함하는 아이템(주로 파일이나 모듈의 상단에서 사용됨)" |
| "에 대한 문서를 생성합니다." |
| |
| #: src/hello/comment.md:20 |
| msgid "" |
| "// Line comments start with two slashes.\n" |
| " // Everything after the slashes is ignored by the compiler.\n" |
| msgstr "" |
| "// 라인 주석은 두 개의 슬래시로 시작합니다.\n" |
| " // 슬래시 이후의 모든 내용은 컴파일러에 의해 무시됩니다.\n" |
| |
| #: src/hello/comment.md:23 |
| msgid "" |
| "// Example: This line won't execute\n" |
| " // println!(\"Hello, world!\");\n" |
| msgstr "" |
| "// 예시: 이 줄은 실행되지 않습니다\n" |
| " // println!(\"Hello, world!\");\n" |
| |
| #: src/hello/comment.md:26 |
| msgid "// Try removing the slashes above and running the code again.\n" |
| msgstr "// 위의 슬래시를 제거하고 코드를 다시 실행해 보세요.\n" |
| |
| #: src/hello/comment.md:28 |
| msgid "" |
| "/*\n" |
| " * Block comments are useful for temporarily disabling code.\n" |
| " * They can also be nested: /* like this */ which makes it easy\n" |
| " * to comment out large sections quickly.\n" |
| " */" |
| msgstr "" |
| "/*\n" |
| " * 블록 주석은 코드를 일시적으로 비활성화하는 데 유용합니다.\n" |
| " * 블록 주석은 중첩될 수도 있습니다: /* 이와 같이 */ 중첩이 가능하여\n" |
| " * 큰 섹션을 빠르게 주석 처리하기 쉽습니다.\n" |
| " */" |
| |
| #: src/hello/comment.md:34 |
| msgid "" |
| "/*\n" |
| " Note: The asterisk column on the left is just for style - \n" |
| " it's not required by the language.\n" |
| " */" |
| msgstr "" |
| "/*\n" |
| " 참고: 왼쪽의 별표 기둥은 단지 스타일을 위한 것입니다 - \n" |
| " 언어적으로 요구되는 사항은 아닙니다.\n" |
| " */" |
| |
| #: src/hello/comment.md:39 |
| msgid "" |
| "// Block comments make it easy to toggle code on/off by adding\n" |
| " // or removing just one slash:\n" |
| msgstr "" |
| "// 블록 주석은 슬래시 하나를 추가하거나 제거하여\n" |
| " // 코드를 켜고 끄기 쉽게 만들어 줍니다:\n" |
| |
| #: src/hello/comment.md:42 |
| msgid "" |
| "/* <- Add a '/' here to uncomment the entire block below\n" |
| "\n" |
| " println!(\"Now\");\n" |
| " println!(\"everything\");\n" |
| " println!(\"executes!\");\n" |
| " // Line comments inside remain unaffected\n" |
| "\n" |
| " // */" |
| msgstr "" |
| "/* <- 여기에 '/'를 추가하면 아래 블록 전체의 주석이 해제됩니다\n" |
| "\n" |
| " println!(\"이제\");\n" |
| " println!(\"모든 것이\");\n" |
| " println!(\"실행됩니다!\");\n" |
| " // 내부의 라인 주석은 영향을 받지 않습니다\n" |
| "\n" |
| " // */" |
| |
| #: src/hello/comment.md:51 |
| msgid "// Block comments can also be used within expressions:\n" |
| msgstr "// 블록 주석은 표현식 내에서도 사용될 수 있습니다:\n" |
| |
| #: src/hello/comment.md:52 |
| msgid "/* 90 + */" |
| msgstr "/* 90 + */" |
| |
| #: src/hello/comment.md:53 |
| msgid "\"Is `x` 10 or 100? x = {}\"" |
| msgstr "\"`x`는 10인가요 100인가요? x = {}\"" |
| |
| #: src/hello/comment.md:57 src/hello/print.md:103 |
| #: src/hello/print/print_debug.md:75 src/hello/print/print_display.md:128 |
| #: src/hello/print/print_display/testcase_list.md:62 src/hello/print/fmt.md:94 |
| #: src/primitives.md:64 src/custom_types/enum.md:100 |
| #: src/custom_types/enum/enum_use.md:45 src/custom_types/enum/c_like.md:33 |
| #: src/custom_types/enum/testcase_linked_list.md:78 |
| #: src/custom_types/constants.md:35 src/types/alias.md:30 |
| #: src/flow_control/for.md:121 src/flow_control/match/destructuring.md:17 |
| #: src/flow_control/match/destructuring/destructure_tuple.md:25 |
| #: src/flow_control/match/destructuring/destructure_slice.md:46 |
| #: src/flow_control/match/destructuring/destructure_enum.md:48 |
| #: src/flow_control/match/destructuring/destructure_pointers.md:63 |
| #: src/flow_control/match/destructuring/destructure_structures.md:45 |
| #: src/flow_control/match/guard.md:43 src/flow_control/match/binding.md:63 |
| #: src/flow_control/if_let.md:118 src/flow_control/let_else.md:55 |
| #: src/flow_control/while_let.md:56 src/fn/closures/capture.md:110 |
| #: src/fn/closures/input_parameters.md:84 src/fn/closures/anonymity.md:47 |
| #: src/fn/closures/input_functions.md:32 |
| #: src/fn/closures/output_parameters.md:49 |
| #: src/fn/closures/closure_examples/iter_any.md:51 |
| #: src/fn/closures/closure_examples/iter_find.md:71 |
| #: src/mod/struct_visibility.md:53 src/attribute/cfg.md:39 src/generics.md:59 |
| #: src/generics/gen_fn.md:54 src/generics/impl.md:48 |
| #: src/generics/gen_trait.md:39 src/generics/bounds.md:73 |
| #: src/generics/bounds/testcase_empty.md:37 src/generics/multi_bounds.md:32 |
| #: src/generics/where.md:49 src/generics/new_types.md:54 |
| #: src/generics/assoc_items.md:10 src/generics/assoc_items/the_problem.md:62 |
| #: src/generics/phantom.md:56 src/generics/phantom/testcase_units.md:75 |
| #: src/scope/raii.md:92 src/scope/move/partial_move.md:57 |
| #: src/scope/borrow/mut.md:56 src/scope/lifetime/explicit.md:68 |
| #: src/scope/lifetime/fn.md:58 src/scope/lifetime/methods.md:24 |
| #: src/scope/lifetime/struct.md:41 src/scope/lifetime/trait.md:28 |
| #: src/scope/lifetime/lifetime_bounds.md:46 |
| #: src/scope/lifetime/static_lifetime.md:133 src/scope/lifetime/elision.md:39 |
| #: src/trait/derive.md:65 src/trait/supertraits.md:40 |
| #: src/trait/disambiguating.md:60 src/error/option_unwrap/map.md:79 |
| #: src/error/option_unwrap/and_then.md:73 |
| #: src/error/option_unwrap/defaults.md:115 src/error/result/result_alias.md:41 |
| #: src/error/multiple_error_types/boxing_errors.md:57 |
| #: src/error/multiple_error_types/reenter_question_mark.md:74 |
| #: src/error/multiple_error_types/wrap_error.md:91 src/std.md:12 |
| #: src/std/rc.md:55 src/std_misc.md:12 |
| #: src/std_misc/threads/testcase_mapreduce.md:127 src/std_misc/path.md:52 |
| #: src/std_misc/fs.md:149 src/meta/doc.md:109 src/meta/playground.md:49 |
| msgid "See also:" |
| msgstr "참고:" |
| |
| #: src/hello/comment.md:59 |
| msgid "[Library documentation](../meta/doc.md)" |
| msgstr "[라이브러리 문서](../meta/doc.md)" |
| |
| #: src/hello/print.md:3 |
| msgid "" |
| "Printing is handled by a series of [`macros`](../macros.md) defined in " |
| "[`std::fmt`](https://doc.rust-lang.org/std/fmt/) some of which are:" |
| msgstr "" |
| "출력은 [`std::fmt`](https://doc.rust-lang.org/std/fmt/)에 정의된 일련의 [`매" |
| "크로`](../macros.md)들에 의해 처리되며, 그 중 몇 가지는 다음과 같습니다:" |
| |
| #: src/hello/print.md:6 |
| msgid "`format!`: write formatted text to [`String`](../std/str.md)" |
| msgstr "`format!`: 형식화된 텍스트를 [`String`](../std/str.md)에 씁니다." |
| |
| #: src/hello/print.md:7 |
| msgid "" |
| "`print!`: same as `format!` but the text is printed to the console " |
| "(io::stdout)." |
| msgstr "`print!`: `format!`과 같지만 텍스트가 콘솔(io::stdout)에 출력됩니다." |
| |
| #: src/hello/print.md:9 |
| msgid "`println!`: same as `print!` but a newline is appended." |
| msgstr "`println!`: `print!`와 같지만 줄바꿈 문자가 추가됩니다." |
| |
| #: src/hello/print.md:10 |
| msgid "" |
| "`eprint!`: same as `print!` but the text is printed to the standard error " |
| "(io::stderr)." |
| msgstr "" |
| "`eprint!`: `print!`와 같지만 텍스트가 표준 에러(io::stderr)로 출력됩니다." |
| |
| #: src/hello/print.md:12 |
| msgid "`eprintln!`: same as `eprint!` but a newline is appended." |
| msgstr "`eprintln!`: `eprint!`와 같지만 줄바꿈 문자가 추가됩니다." |
| |
| #: src/hello/print.md:14 |
| msgid "" |
| "All parse text in the same fashion. As a plus, Rust checks formatting " |
| "correctness at compile time." |
| msgstr "" |
| "모두 같은 방식으로 텍스트를 파싱합니다. 추가로, Rust는 컴파일 타임에 형식화" |
| "의 올바름을 검사합니다." |
| |
| #: src/hello/print.md:19 |
| msgid "" |
| "// In general, the `{}` will be automatically replaced with any\n" |
| " // arguments. These will be stringified.\n" |
| msgstr "" |
| "// 일반적으로 `{}`는 어떤 인자로든 자동으로 교체됩니다.\n" |
| " // 이들은 문자열화될 것입니다.\n" |
| |
| #: src/hello/print.md:21 |
| msgid "\"{} days\"" |
| msgstr "\"{}일\"" |
| |
| #: src/hello/print.md:23 |
| msgid "" |
| "// Positional arguments can be used. Specifying an integer inside `{}`\n" |
| " // determines which additional argument will be replaced. Arguments " |
| "start\n" |
| " // at 0 immediately after the format string.\n" |
| msgstr "" |
| "// 위치 인자를 사용할 수 있습니다. `{}` 안에 정수를 지정하면\n" |
| " // 어떤 추가 인자가 교체될지 결정합니다. 인자는 형식 문자열\n" |
| " // 바로 뒤에서 0부터 시작합니다.\n" |
| |
| #: src/hello/print.md:26 |
| msgid "\"{0}, this is {1}. {1}, this is {0}\"" |
| msgstr "\"{0}, 여기는 {1}입니다. {1}, 여기는 {0}입니다.\"" |
| |
| #: src/hello/print.md:26 src/scope/move/partial_move.md:31 |
| msgid "\"Alice\"" |
| msgstr "\"앨리스\"" |
| |
| #: src/hello/print.md:26 src/flow_control/for.md:65 src/flow_control/for.md:85 |
| #: src/flow_control/for.md:104 |
| msgid "\"Bob\"" |
| msgstr "\"밥\"" |
| |
| #: src/hello/print.md:28 |
| msgid "// As can named arguments.\n" |
| msgstr "// 이름을 지정한 인자(named arguments)도 사용할 수 있습니다.\n" |
| |
| #: src/hello/print.md:29 |
| msgid "\"{subject} {verb} {object}\"" |
| msgstr "\"{subject} {verb} {object}\"" |
| |
| #: src/hello/print.md:30 |
| msgid "\"the lazy dog\"" |
| msgstr "\"게으른 개\"" |
| |
| #: src/hello/print.md:31 |
| msgid "\"the quick brown fox\"" |
| msgstr "\"빠른 갈색 여우\"" |
| |
| #: src/hello/print.md:32 |
| msgid "\"jumps over\"" |
| msgstr "\"넘어 뛰어넘다\"" |
| |
| #: src/hello/print.md:34 |
| msgid "" |
| "// Different formatting can be invoked by specifying the format character\n" |
| " // after a `:`.\n" |
| msgstr "// `:` 뒤에 형식 문자를 지정하여 다양한 형식화를 수행할 수 있습니다.\n" |
| |
| #: src/hello/print.md:36 |
| msgid "\"Base 10: {}\"" |
| msgstr "\"10진수: {}\"" |
| |
| #: src/hello/print.md:36 |
| msgid "// 69420\n" |
| msgstr "// 69420\n" |
| |
| #: src/hello/print.md:37 |
| msgid "\"Base 2 (binary): {:b}\"" |
| msgstr "\"2진수: {:b}\"" |
| |
| #: src/hello/print.md:37 |
| msgid "// 10000111100101100\n" |
| msgstr "// 10000111100101100\n" |
| |
| #: src/hello/print.md:38 |
| msgid "\"Base 8 (octal): {:o}\"" |
| msgstr "\"8진수: {:o}\"" |
| |
| #: src/hello/print.md:38 |
| msgid "// 207454\n" |
| msgstr "// 207454\n" |
| |
| #: src/hello/print.md:39 |
| msgid "\"Base 16 (hexadecimal): {:x}\"" |
| msgstr "\"16진수: {:x}\"" |
| |
| #: src/hello/print.md:39 |
| msgid "// 10f2c\n" |
| msgstr "// 10f2c\n" |
| |
| #: src/hello/print.md:41 |
| msgid "" |
| "// You can right-justify text with a specified width. This will\n" |
| " // output \" 1\". (Four white spaces and a \"1\", for a total width " |
| "of 5.)\n" |
| msgstr "" |
| "// 지정된 너비로 텍스트를 오른쪽 정렬할 수 있습니다. 이 예시는\n" |
| " // \" 1\"을 출력할 것입니다. (공백 4개와 \"1\" 하나로 총 너비 5가 됩니" |
| "다.)\n" |
| |
| #: src/hello/print.md:43 |
| msgid "\"{number:>5}\"" |
| msgstr "\"{number:>5}\"" |
| |
| #: src/hello/print.md:45 |
| msgid "// You can pad numbers with extra zeroes,\n" |
| msgstr "// 숫자를 0으로 채울 수도 있습니다,\n" |
| |
| #: src/hello/print.md:46 |
| msgid "\"{number:0>5}\"" |
| msgstr "\"{number:0>5}\"" |
| |
| #: src/hello/print.md:46 |
| msgid "" |
| "// 00001\n" |
| " // and left-adjust by flipping the sign. This will output \"10000\".\n" |
| msgstr "" |
| "// 00001\n" |
| " // 그리고 부호를 뒤집어 왼쪽 정렬할 수 있습니다. 이것은 \"10000\"을 출력" |
| "합니다.\n" |
| |
| #: src/hello/print.md:48 |
| msgid "\"{number:0<5}\"" |
| msgstr "\"{number:0<5}\"" |
| |
| #: src/hello/print.md:48 |
| msgid "// 10000\n" |
| msgstr "// 10000\n" |
| |
| #: src/hello/print.md:50 |
| msgid "" |
| "// You can use named arguments in the format specifier by appending a `$`.\n" |
| msgstr "" |
| "// 형식 지정자(format specifier)에 `$`를 붙여 명명된 인자를 사용할 수 있습니" |
| "다.\n" |
| |
| #: src/hello/print.md:51 |
| msgid "\"{number:0>width$}\"" |
| msgstr "\"{number:0>width$}\"" |
| |
| #: src/hello/print.md:53 |
| msgid "" |
| "// Rust even checks to make sure the correct number of arguments are used.\n" |
| msgstr "// Rust는 올바른 개수의 인자가 사용되었는지도 확인합니다.\n" |
| |
| #: src/hello/print.md:54 |
| msgid "\"My name is {0}, {1} {0}\"" |
| msgstr "\"제 이름은 {0}, {1} {0}입니다.\"" |
| |
| #: src/hello/print.md:54 |
| msgid "\"Bond\"" |
| msgstr "\"본드\"" |
| |
| #: src/hello/print.md:55 |
| msgid "// FIXME ^ Add the missing argument: \"James\"\n" |
| msgstr "// FIXME ^ 누락된 인자를 추가하세요: \"제임스\"\n" |
| |
| #: src/hello/print.md:57 |
| msgid "" |
| "// Only types that implement fmt::Display can be formatted with `{}`. User-\n" |
| " // defined types do not implement fmt::Display by default.\n" |
| msgstr "" |
| "// fmt::Display를 구현하는 타입만 `{}`로 형식화할 수 있습니다. 사용자\n" |
| " // 정의 타입은 기본적으로 fmt::Display를 구현하지 않습니다.\n" |
| |
| #: src/hello/print.md:60 |
| msgid "// disable `dead_code` which warn against unused module\n" |
| msgstr "// 사용되지 않는 모듈에 대한 경고인 `dead_code`를 비활성화합니다\n" |
| |
| #: src/hello/print.md:63 |
| msgid "" |
| "// This will not compile because `Structure` does not implement\n" |
| " // fmt::Display.\n" |
| " // println!(\"This struct `{}` won't print...\", Structure(3));\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// `Structure`가 fmt::Display를 구현하지 않으므로 컴파일되지 않습니다.\n" |
| " // println!(\"이 구조체 `{}`는 출력되지 않습니다...\", Structure(3));\n" |
| " // TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/hello/print.md:68 |
| msgid "" |
| "// For Rust 1.58 and above, you can directly capture the argument from a\n" |
| " // surrounding variable. Just like the above, this will output\n" |
| " // \" 1\", 4 white spaces and a \"1\".\n" |
| msgstr "" |
| "// Rust 1.58 이상에서는 주변 변수에서 직접 인자를 캡처할 수 있습니다.\n" |
| " // 위와 마찬가지로, 이것은 \" 1\"(공백 4개와 \"1\")을 출력합니다.\n" |
| |
| #: src/hello/print.md:73 |
| msgid "\"{number:>width$}\"" |
| msgstr "\"{number:>width$}\"" |
| |
| #: src/hello/print.md:77 |
| msgid "" |
| "[`std::fmt`](https://doc.rust-lang.org/std/fmt/) contains many [`traits`]" |
| "(https://doc.rust-lang.org/std/fmt/#formatting-traits) which govern the " |
| "display of text. The base form of two important ones are listed below:" |
| msgstr "" |
| "[`std::fmt`](https://doc.rust-lang.org/std/fmt/)에는 텍스트 표시를 제어하는 " |
| "많은 [`트레이트`](https://doc.rust-lang.org/std/fmt/#formatting-traits)가 포" |
| "함되어 있습니다. 그 중 중요한 두 가지의 기본 형태는 다음과 같습니다:" |
| |
| #: src/hello/print.md:80 |
| msgid "" |
| "`fmt::Debug`: Uses the `{:?}` marker. Format text for debugging purposes." |
| msgstr "" |
| "`fmt::Debug`: `{:?}` 마커를 사용합니다. 디버깅 목적으로 텍스트 형식을 지정합" |
| "니다." |
| |
| #: src/hello/print.md:81 |
| msgid "" |
| "`fmt::Display`: Uses the `{}` marker. Format text in a more elegant, user " |
| "friendly fashion." |
| msgstr "" |
| "`fmt::Display`: `{}` 마커를 사용합니다. 보다 우아하고 사용자 친화적인 방식으" |
| "로 텍스트 형식을 지정합니다." |
| |
| #: src/hello/print.md:84 |
| msgid "" |
| "Here, we used `fmt::Display` because the std library provides " |
| "implementations for these types. To print text for custom types, more steps " |
| "are required." |
| msgstr "" |
| "여기서는 표준 라이브러리가 이러한 타입들에 대한 구현을 제공하기 때문에 " |
| "`fmt::Display`를 사용했습니다. 커스텀 타입에 대해 텍스트를 출력하려면 더 많" |
| "은 단계가 필요합니다." |
| |
| #: src/hello/print.md:87 |
| msgid "" |
| "Implementing the `fmt::Display` trait automatically implements the " |
| "[`ToString`](https://doc.rust-lang.org/std/string/trait.ToString.html) trait " |
| "which allows us to [convert](../conversion/string.md) the type to [`String`]" |
| "(../std/str.md)." |
| msgstr "" |
| "`fmt::Display` 트레이트를 구현하면 타입을 [`String`](../std/str.md)으로 [변" |
| "환](../conversion/string.md)할 수 있게 해주는 [`ToString`](https://doc.rust-" |
| "lang.org/std/string/trait.ToString.html) 트레이트가 자동으로 구현됩니다." |
| |
| #: src/hello/print.md:90 |
| msgid "" |
| "In _line 43_, `#[allow(dead_code)]` is an [attribute](../attribute.md) which " |
| "only applies to the module after it." |
| msgstr "" |
| "_43행_의 `#[allow(dead_code)]`는 그 뒤에 오는 모듈에만 적용되는 [속성](../" |
| "attribute.md)입니다." |
| |
| #: src/hello/print.md:92 |
| msgid "Activities" |
| msgstr "실습" |
| |
| #: src/hello/print.md:94 |
| msgid "" |
| "Fix the issue in the above code (see FIXME) so that it runs without error." |
| msgstr "위 코드의 문제(FIXME 참고)를 수정하여 에러 없이 실행되도록 하세요." |
| |
| #: src/hello/print.md:96 |
| msgid "" |
| "Try uncommenting the line that attempts to format the `Structure` struct " |
| "(see TODO)" |
| msgstr "" |
| "`Structure` 구조체를 형식화하려는 줄의 주석을 제거해 보세요 (TODO 참고)." |
| |
| #: src/hello/print.md:98 |
| msgid "" |
| "Add a `println!` macro call that prints: `Pi is roughly 3.142` by " |
| "controlling the number of decimal places shown. For the purposes of this " |
| "exercise, use `let pi = 3.141592` as an estimate for pi. (Hint: you may need " |
| "to check the [`std::fmt`](https://doc.rust-lang.org/std/fmt/) documentation " |
| "for setting the number of decimals to display)" |
| msgstr "" |
| "표시되는 소수점 자릿수를 제어하여 `Pi is roughly 3.142`를 출력하는 `println!" |
| "` 매크로 호출을 추가하세요. 이 연습을 위해 파이의 근사값으로 `let pi = " |
| "3.141592`를 사용하세요. (힌트: 표시할 소수점 자릿수를 설정하는 방법은 " |
| "[`std::fmt`](https://doc.rust-lang.org/std/fmt/) 문서를 확인해야 할 수도 있습" |
| "니다.)" |
| |
| #: src/hello/print.md:105 |
| msgid "" |
| "[`std::fmt`](https://doc.rust-lang.org/std/fmt/), [`macros`](../macros.md), " |
| "[`struct`](../custom_types/structs.md), [`traits`](https://doc.rust-lang.org/" |
| "std/fmt/#formatting-traits), and [`dead_code`](../attribute/unused.md)" |
| msgstr "" |
| "[`std::fmt`](https://doc.rust-lang.org/std/fmt/), [`매크로`](../macros.md), " |
| "[`구조체`](../custom_types/structs.md), [`트레이트`](https://doc.rust-" |
| "lang.org/std/fmt/#formatting-traits), 그리고 [`dead_code`](../attribute/" |
| "unused.md)" |
| |
| #: src/hello/print/print_debug.md:3 |
| msgid "" |
| "All types which want to use `std::fmt` formatting `traits` require an " |
| "implementation to be printable. Automatic implementations are only provided " |
| "for types such as in the `std` library. All others _must_ be manually " |
| "implemented somehow." |
| msgstr "" |
| "`std::fmt` 형식화 `트레이트`를 사용하려는 모든 타입은 출력 가능하도록 구현이 " |
| "필요합니다. 자동 구현은 `std` 라이브러리와 같은 타입들에 대해서만 제공됩니" |
| "다. 그 외의 모든 타입은 어떻게든 수동으로 구현_해야만_ 합니다." |
| |
| #: src/hello/print/print_debug.md:8 |
| msgid "" |
| "The `fmt::Debug` `trait` makes this very straightforward. _All_ types can " |
| "`derive` (automatically create) the `fmt::Debug` implementation. This is not " |
| "true for `fmt::Display` which must be manually implemented." |
| msgstr "" |
| "`fmt::Debug` `트레이트`는 이를 매우 간단하게 만들어 줍니다. _모든_ 타입은 " |
| "`fmt::Debug` 구현을 `derive`(자동 생성)할 수 있습니다. 하지만 `fmt::Display`" |
| "는 그렇지 않으며 수동으로 구현해야 합니다." |
| |
| #: src/hello/print/print_debug.md:13 |
| msgid "" |
| "// This structure cannot be printed either with `fmt::Display` or\n" |
| "// with `fmt::Debug`.\n" |
| msgstr "" |
| "// 이 구조체는 `fmt::Display`나 `fmt::Debug` 중 어느 것으로도\n" |
| "// 출력할 수 없습니다.\n" |
| |
| #: src/hello/print/print_debug.md:16 |
| msgid "" |
| "// The `derive` attribute automatically creates the implementation\n" |
| "// required to make this `struct` printable with `fmt::Debug`.\n" |
| msgstr "" |
| "// `derive` 속성은 이 `구조체`를 `fmt::Debug`로 출력 가능하게 만드는 데\n" |
| "// 필요한 구현을 자동으로 생성합니다.\n" |
| |
| #: src/hello/print/print_debug.md:23 |
| msgid "All `std` library types are automatically printable with `{:?}` too:" |
| msgstr "모든 `std` 라이브러리 타입들도 `{:?}`로 자동 출력이 가능합니다:" |
| |
| #: src/hello/print/print_debug.md:26 |
| msgid "" |
| "// Derive the `fmt::Debug` implementation for `Structure`. `Structure`\n" |
| "// is a structure which contains a single `i32`.\n" |
| msgstr "" |
| "// `Structure`에 대해 `fmt::Debug` 구현을 유도(derive)합니다. `Structure`는\n" |
| "// 단일 `i32`를 포함하는 구조체입니다.\n" |
| |
| #: src/hello/print/print_debug.md:30 |
| msgid "" |
| "// Put a `Structure` inside of the structure `Deep`. Make it printable\n" |
| "// also.\n" |
| msgstr "" |
| "// `Deep` 구조체 안에 `Structure`를 넣으세요. 그리고 역시 출력 가능하게 만드" |
| "세요.\n" |
| |
| #: src/hello/print/print_debug.md:37 |
| msgid "// Printing with `{:?}` is similar to with `{}`.\n" |
| msgstr "// `{:?}`를 이용한 출력은 `{}`와 유사합니다.\n" |
| |
| #: src/hello/print/print_debug.md:38 |
| msgid "\"{:?} months in a year.\"" |
| msgstr "\"1년은 {:?}개월입니다.\"" |
| |
| #: src/hello/print/print_debug.md:39 |
| msgid "\"{1:?} {0:?} is the {actor:?} name.\"" |
| msgstr "\"{1:?} {0:?}은 {actor:?}의 이름입니다.\"" |
| |
| #: src/hello/print/print_debug.md:40 |
| msgid "\"Slater\"" |
| msgstr "\"슬레이터\"" |
| |
| #: src/hello/print/print_debug.md:41 |
| msgid "\"Christian\"" |
| msgstr "\"크리스찬\"" |
| |
| #: src/hello/print/print_debug.md:42 |
| msgid "\"actor's\"" |
| msgstr "\"배우의\"" |
| |
| #: src/hello/print/print_debug.md:44 |
| msgid "// `Structure` is printable!\n" |
| msgstr "// `Structure`는 출력 가능합니다!\n" |
| |
| #: src/hello/print/print_debug.md:45 src/hello/print/print_debug.md:49 |
| msgid "\"Now {:?} will print!\"" |
| msgstr "\"이제 {:?}가 출력될 것입니다!\"" |
| |
| #: src/hello/print/print_debug.md:47 |
| msgid "" |
| "// The problem with `derive` is there is no control over how\n" |
| " // the results look. What if I want this to just show a `7`?\n" |
| msgstr "" |
| "// `derive`의 문제점은 결과가 어떻게 보일지 제어할 수 없다는 것입니다.\n" |
| " // 만약 이것을 단지 `7`로 보여주고 싶다면 어떡하죠?\n" |
| |
| #: src/hello/print/print_debug.md:53 |
| msgid "" |
| "So `fmt::Debug` definitely makes this printable but sacrifices some " |
| "elegance. Rust also provides \"pretty printing\" with `{:#?}`." |
| msgstr "" |
| "따라서 `fmt::Debug`는 확실히 출력을 가능하게 하지만 우아함을 어느 정도 희생합" |
| "니다. Rust는 `{:#?}`를 사용한 \"예쁘게 출력하기(pretty printing)\"도 제공합니" |
| "다." |
| |
| #: src/hello/print/print_debug.md:64 src/custom_types/structs.md:42 |
| msgid "\"Peter\"" |
| msgstr "\"피터\"" |
| |
| #: src/hello/print/print_debug.md:68 |
| msgid "// Pretty print\n" |
| msgstr "// 예쁘게 출력하기\n" |
| |
| #: src/hello/print/print_debug.md:69 |
| msgid "\"{:#?}\"" |
| msgstr "\"{:#?}\"" |
| |
| #: src/hello/print/print_debug.md:73 |
| msgid "One can manually implement `fmt::Display` to control the display." |
| msgstr "`fmt::Display`를 수동으로 구현하여 출력을 제어할 수 있습니다." |
| |
| #: src/hello/print/print_debug.md:77 |
| msgid "" |
| "[`attributes`](https://doc.rust-lang.org/reference/attributes.html), " |
| "[`derive`](../../trait/derive.md), [`std::fmt`](https://doc.rust-lang.org/" |
| "std/fmt/), and [`struct`](../../custom_types/structs.md)" |
| msgstr "" |
| "[`속성`](https://doc.rust-lang.org/reference/attributes.html), [`derive`]" |
| "(../../trait/derive.md), [`std::fmt`](https://doc.rust-lang.org/std/fmt/), 그" |
| "리고 [`구조체`](../../custom_types/structs.md)" |
| |
| #: src/hello/print/print_display.md:3 |
| msgid "" |
| "`fmt::Debug` hardly looks compact and clean, so it is often advantageous to " |
| "customize the output appearance. This is done by manually implementing " |
| "[`fmt::Display`](https://doc.rust-lang.org/std/fmt/), which uses the `{}` " |
| "print marker. Implementing it looks like this:" |
| msgstr "" |
| "`fmt::Debug`는 콤팩트하고 깔끔해 보이지 않으므로, 출력 모양을 커스터마이징하" |
| "는 것이 종종 유리합니다. 이는 `{}` 출력 마커를 사용하는 [`fmt::Display`]" |
| "(https://doc.rust-lang.org/std/fmt/)를 수동으로 구현함으로써 수행됩니다. 구현" |
| "은 다음과 같습니다:" |
| |
| #: src/hello/print/print_display.md:9 |
| msgid "// Import (via `use`) the `fmt` module to make it available.\n" |
| msgstr "// `fmt` 모듈을 (`use`를 통해) 가져와서 사용할 수 있게 합니다.\n" |
| |
| #: src/hello/print/print_display.md:11 |
| msgid "" |
| "// Define a structure for which `fmt::Display` will be implemented. This is\n" |
| "// a tuple struct named `Structure` that contains an `i32`.\n" |
| msgstr "" |
| "// `fmt::Display`를 구현할 구조체를 정의합니다. 이것은\n" |
| "// `i32`를 포함하는 `Structure`라는 이름의 튜플 구조체입니다.\n" |
| |
| #: src/hello/print/print_display.md:15 |
| msgid "" |
| "// To use the `{}` marker, the trait `fmt::Display` must be implemented\n" |
| "// manually for the type.\n" |
| msgstr "" |
| "// `{}` 마커를 사용하려면, `fmt::Display` 트레이트가 해당 타입에 대해\n" |
| "// 수동으로 구현되어야 합니다.\n" |
| |
| #: src/hello/print/print_display.md:19 |
| msgid "// This trait requires `fmt` with this exact signature.\n" |
| msgstr "// 이 트레이트는 정확히 이 시그니처를 가진 `fmt`를 요구합니다.\n" |
| |
| #: src/hello/print/print_display.md:21 |
| msgid "" |
| "// Write strictly the first element into the supplied output\n" |
| " // stream: `f`. Returns `fmt::Result` which indicates whether the\n" |
| " // operation succeeded or failed. Note that `write!` uses syntax " |
| "which\n" |
| " // is very similar to `println!`.\n" |
| msgstr "" |
| "// 제공된 출력 스트림 `f`에 첫 번째 요소를 씁니다.\n" |
| " // 작업의 성공 또는 실패 여부를 나타내는 `fmt::Result`를 반환합니" |
| "다.\n" |
| " // `write!`는 `println!`과 매우 유사한 구문을 사용한다는 점에 유의하" |
| "세요.\n" |
| |
| #: src/hello/print/print_display.md:25 |
| #: src/hello/print/print_display/testcase_list.md:13 |
| #: src/hello/print/print_display/testcase_list.md:39 |
| #: src/hello/print/print_display/testcase_list.md:49 src/hello/print/fmt.md:53 |
| #: src/custom_types/enum/testcase_linked_list.md:74 src/conversion/string.md:25 |
| #: src/flow_control/loop.md:26 src/flow_control/while.md:21 |
| #: src/flow_control/for.md:23 src/flow_control/for.md:43 src/fn.md:40 |
| #: src/fn/closures/capture.md:96 src/fn/closures/capture.md:97 |
| #: src/fn/closures/anonymity.md:41 src/generics/bounds.md:12 |
| #: src/macros/repeat.md:24 src/macros/repeat.md:25 src/macros/repeat.md:26 |
| #: src/error/result.md:73 src/std/str.md:92 src/std/str.md:102 |
| #: src/std/str.md:106 src/std/str.md:111 src/std/result.md:72 |
| #: src/std/result/question_mark.md:57 src/std/result/question_mark.md:65 |
| #: src/std_misc/file/read_lines.md:60 src/std_misc/arg/matching.md:9 |
| #: src/std_misc/arg/matching.md:13 |
| msgid "\"{}\"" |
| msgstr "\"{}\"" |
| |
| #: src/hello/print/print_display.md:30 |
| msgid "" |
| "`fmt::Display` may be cleaner than `fmt::Debug` but this presents a problem " |
| "for the `std` library. How should ambiguous types be displayed? For example, " |
| "if the `std` library implemented a single style for all `Vec<T>`, what style " |
| "should it be? Would it be either of these two?" |
| msgstr "" |
| "`fmt::Display`가 `fmt::Debug`보다 깔끔할 수 있지만, 이는 `std` 라이브러리에 " |
| "문제를 제기합니다. 모호한 타입들은 어떻게 표시되어야 할까요? 예를 들어, " |
| "`std` 라이브러리가 모든 `Vec<T>`에 대해 단일 스타일을 구현했다면, 어떤 스타일" |
| "이어야 할까요? 다음 두 가지 중 하나일까요?" |
| |
| #: src/hello/print/print_display.md:35 |
| msgid "`Vec<path>`: `/:/etc:/home/username:/bin` (split on `:`)" |
| msgstr "`Vec<path>`: `/:/etc:/home/username:/bin` (`:`로 구분)" |
| |
| #: src/hello/print/print_display.md:36 |
| msgid "`Vec<number>`: `1,2,3` (split on `,`)" |
| msgstr "`Vec<number>`: `1,2,3` (`,`로 구분)" |
| |
| #: src/hello/print/print_display.md:38 |
| msgid "" |
| "No, because there is no ideal style for all types and the `std` library " |
| "doesn't presume to dictate one. `fmt::Display` is not implemented for " |
| "`Vec<T>` or for any other generic containers. `fmt::Debug` must then be used " |
| "for these generic cases." |
| msgstr "" |
| "아니요, 모든 타입에 이상적인 스타일은 없으며 `std` 라이브러리가 하나를 독단적" |
| "으로 정하지 않기 때문입니다. `fmt::Display`는 `Vec<T>`나 다른 제네릭 컨테이너" |
| "에 대해 구현되어 있지 않습니다. 따라서 이러한 제네릭 케이스에는 `fmt::Debug`" |
| "를 사용해야 합니다." |
| |
| #: src/hello/print/print_display.md:43 |
| msgid "" |
| "This is not a problem though because for any new _container_ type which is " |
| "_not_ generic, `fmt::Display` can be implemented." |
| msgstr "" |
| "하지만 제네릭이 _아닌_ 새로운 _컨테이너_ 타입에 대해서는 `fmt::Display`를 구" |
| "현할 수 있으므로 이는 문제가 되지 않습니다." |
| |
| #: src/hello/print/print_display.md:47 |
| msgid "// Import `fmt`\n" |
| msgstr "// `fmt` 가져오기\n" |
| |
| #: src/hello/print/print_display.md:48 |
| msgid "" |
| "// A structure holding two numbers. `Debug` will be derived so the results " |
| "can\n" |
| "// be contrasted with `Display`.\n" |
| msgstr "" |
| "// 두 숫자를 보유하는 구조체입니다. `Display`와 대조해 볼 수 있도록\n" |
| "// `Debug`를 유도(derive)할 것입니다.\n" |
| |
| #: src/hello/print/print_display.md:53 |
| msgid "// Implement `Display` for `MinMax`.\n" |
| msgstr "// `MinMax`에 대해 `Display`를 구현합니다.\n" |
| |
| #: src/hello/print/print_display.md:57 |
| msgid "// Use `self.number` to refer to each positional data point.\n" |
| msgstr "// 각 위치별 데이터 지점을 참조하기 위해 `self.number`를 사용합니다.\n" |
| |
| #: src/hello/print/print_display.md:58 |
| msgid "\"({}, {})\"" |
| msgstr "\"({}, {})\"" |
| |
| #: src/hello/print/print_display.md:61 |
| msgid "// Define a structure where the fields are nameable for comparison.\n" |
| msgstr "// 비교를 위해 필드에 이름을 붙일 수 있는 구조체를 정의합니다.\n" |
| |
| #: src/hello/print/print_display.md:68 |
| msgid "// Similarly, implement `Display` for `Point2D`.\n" |
| msgstr "// 마찬가지로, `Point2D`에 대해 `Display`를 구현합니다.\n" |
| |
| #: src/hello/print/print_display.md:72 |
| msgid "// Customize so only `x` and `y` are denoted.\n" |
| msgstr "// `x`와 `y`만 표시되도록 커스터마이징합니다.\n" |
| |
| #: src/hello/print/print_display.md:73 |
| msgid "\"x: {}, y: {}\"" |
| msgstr "\"x: {}, y: {}\"" |
| |
| #: src/hello/print/print_display.md:80 |
| msgid "\"Compare structures:\"" |
| msgstr "\"구조체 비교:\"" |
| |
| #: src/hello/print/print_display.md:81 src/hello/print/print_display.md:94 |
| msgid "\"Display: {}\"" |
| msgstr "\"디스플레이: {}\"" |
| |
| #: src/hello/print/print_display.md:82 src/hello/print/print_display.md:95 |
| msgid "\"Debug: {:?}\"" |
| msgstr "\"디버그: {:?}\"" |
| |
| #: src/hello/print/print_display.md:87 |
| msgid "\"The big range is {big} and the small is {small}\"" |
| msgstr "\"큰 범위는 {big}이고 작은 범위는 {small}입니다.\"" |
| |
| #: src/hello/print/print_display.md:93 |
| msgid "\"Compare points:\"" |
| msgstr "\"좌표 비교:\"" |
| |
| #: src/hello/print/print_display.md:97 |
| msgid "" |
| "// Error. Both `Debug` and `Display` were implemented, but `{:b}`\n" |
| " // requires `fmt::Binary` to be implemented. This will not work.\n" |
| " // println!(\"What does Point2D look like in binary: {:b}?\", point);\n" |
| msgstr "" |
| "// 에러. `Debug`와 `Display`는 모두 구현되었지만, `{:b}`는\n" |
| " // `fmt::Binary` 구현을 요구합니다. 이것은 작동하지 않을 것입니다.\n" |
| " // println!(\"Point2D의 2진수 형태는 무엇일까요: {:b}?\", point);\n" |
| |
| #: src/hello/print/print_display.md:103 |
| msgid "" |
| "So, `fmt::Display` has been implemented but `fmt::Binary` has not, and " |
| "therefore cannot be used. `std::fmt` has many such [`traits`](https://" |
| "doc.rust-lang.org/std/fmt/#formatting-traits) and each requires its own " |
| "implementation. This is detailed further in [`std::fmt`](https://doc.rust-" |
| "lang.org/std/fmt/)." |
| msgstr "" |
| "따라서, `fmt::Display`는 구현되었지만 `fmt::Binary`는 구현되지 않았으므로 사" |
| "용할 수 없습니다. `std::fmt`에는 이와 같은 많은 [`트레이트`](https://" |
| "doc.rust-lang.org/std/fmt/#formatting-traits)가 있으며 각각은 자체적인 구현" |
| "을 요구합니다. 이에 대한 자세한 내용은 [`std::fmt`](https://doc.rust-" |
| "lang.org/std/fmt/)에 나와 있습니다." |
| |
| #: src/hello/print/print_display.md:109 |
| msgid "" |
| "After checking the output of the above example, use the `Point2D` struct as " |
| "a guide to add a `Complex` struct to the example. When printed in the same " |
| "way, the output should be:" |
| msgstr "" |
| "위 예제의 출력을 확인한 후, `Point2D` 구조체를 가이드로 삼아 예제에 " |
| "`Complex` 구조체를 추가해 보세요. 같은 방식으로 출력했을 때의 결과는 다음과 " |
| "같아야 합니다:" |
| |
| #: src/hello/print/print_display.md:121 |
| msgid "Bonus: Add a space before the `+`/`-` signs." |
| msgstr "보너스: `+`/`-` 기호 앞에 공백을 추가하세요." |
| |
| #: src/hello/print/print_display.md:123 |
| msgid "Hints in case you get stuck:" |
| msgstr "막혔을 때를 위한 힌트:" |
| |
| #: src/hello/print/print_display.md:125 |
| msgid "" |
| "Check the documentation for [`Sign/#/0`](https://doc.rust-lang.org/std/fmt/" |
| "#sign0) in `std::fmt`." |
| msgstr "" |
| "`std::fmt`에서 [`Sign/#/0`](https://doc.rust-lang.org/std/fmt/#sign0)에 대한 " |
| "문서를 확인하세요." |
| |
| #: src/hello/print/print_display.md:126 |
| msgid "" |
| "Bonus: Check [`if`\\-`else`](../../flow_control/if_else.md) branching and " |
| "the [`abs`](https://doc.rust-lang.org/std/primitive.f64.html#method.abs) " |
| "function." |
| msgstr "" |
| "보너스: [`if`\\-`else`](../../flow_control/if_else.md) 분기와 [`abs`]" |
| "(https://doc.rust-lang.org/std/primitive.f64.html#method.abs) 함수를 확인하세" |
| "요." |
| |
| #: src/hello/print/print_display.md:130 |
| msgid "" |
| "[`derive`](../../trait/derive.md), [`std::fmt`](https://doc.rust-lang.org/" |
| "std/fmt/), [`macros`](../../macros.md), [`struct`](../../custom_types/" |
| "structs.md), [`trait`](https://doc.rust-lang.org/std/fmt/#formatting-" |
| "traits), and [`use`](../../mod/use.md)" |
| msgstr "" |
| "[`derive`](../../trait/derive.md), [`std::fmt`](https://doc.rust-lang.org/" |
| "std/fmt/), [`매크로`](../../macros.md), [`구조체`](../../custom_types/" |
| "structs.md), [`트레이트`](https://doc.rust-lang.org/std/fmt/#formatting-" |
| "traits), 그리고 [`use`](../../mod/use.md)" |
| |
| #: src/hello/print/print_display/testcase_list.md:3 |
| msgid "" |
| "Implementing `fmt::Display` for a structure where the elements must each be " |
| "handled sequentially is tricky. The problem is that each `write!` generates " |
| "a `fmt::Result`. Proper handling of this requires dealing with _all_ the " |
| "results. Rust provides the `?` operator for exactly this purpose." |
| msgstr "" |
| "각 요소를 순차적으로 처리해야 하는 구조체에 대해 `fmt::Display`를 구현하는 것" |
| "은 까다롭습니다. 문제는 각 `write!`가 `fmt::Result`를 생성한다는 것입니다. 이" |
| "를 적절히 처리하려면 _모든_ 결과를 다뤄야 합니다. Rust는 정확히 이 목적을 위" |
| "해 `?` 연산자를 제공합니다." |
| |
| #: src/hello/print/print_display/testcase_list.md:8 |
| msgid "Using `?` on `write!` looks like this:" |
| msgstr "`write!`에 `?`를 사용하는 것은 다음과 같습니다:" |
| |
| #: src/hello/print/print_display/testcase_list.md:11 |
| msgid "" |
| "// Try `write!` to see if it errors. If it errors, return\n" |
| "// the error. Otherwise continue.\n" |
| msgstr "" |
| "// `write!`가 에러를 발생시키는지 확인합니다. 에러가 발생하면\n" |
| "// 에러를 반환합니다. 그렇지 않으면 계속 진행합니다.\n" |
| |
| #: src/hello/print/print_display/testcase_list.md:16 |
| msgid "" |
| "With `?` available, implementing `fmt::Display` for a `Vec` is " |
| "straightforward:" |
| msgstr "`?`가 사용 가능해지면 `Vec`에 대한 `fmt::Display` 구현은 간단해집니다:" |
| |
| #: src/hello/print/print_display/testcase_list.md:20 |
| msgid "// Import the `fmt` module.\n" |
| msgstr "// `fmt` 모듈을 가져옵니다.\n" |
| |
| #: src/hello/print/print_display/testcase_list.md:21 |
| msgid "// Define a structure named `List` containing a `Vec`.\n" |
| msgstr "// `Vec`을 포함하는 `List`라는 이름의 구조체를 정의합니다.\n" |
| |
| #: src/hello/print/print_display/testcase_list.md:27 |
| msgid "" |
| "// Extract the value using tuple indexing,\n" |
| " // and create a reference to `vec`.\n" |
| msgstr "" |
| "// 튜플 인덱싱을 사용하여 값을 추출하고,\n" |
| " // `vec`에 대한 참조를 생성합니다.\n" |
| |
| #: src/hello/print/print_display/testcase_list.md:31 |
| msgid "\"[\"" |
| msgstr "\"[\"" |
| |
| #: src/hello/print/print_display/testcase_list.md:33 |
| msgid "" |
| "// Iterate over `v` in `vec` while enumerating the iteration\n" |
| " // index in `index`.\n" |
| msgstr "// `vec`의 `v`를 순회하면서 반복 인덱스를 `index`에 열거합니다.\n" |
| |
| #: src/hello/print/print_display/testcase_list.md:36 |
| msgid "" |
| "// For every element except the first, add a comma.\n" |
| " // Use the ? operator to return on errors.\n" |
| msgstr "" |
| "// 첫 번째를 제외한 모든 요소에 콤마를 추가합니다.\n" |
| " // 에러 시 반환하기 위해 ? 연산자를 사용합니다.\n" |
| |
| #: src/hello/print/print_display/testcase_list.md:38 src/std/str.md:36 |
| msgid "\", \"" |
| msgstr "\", \"" |
| |
| #: src/hello/print/print_display/testcase_list.md:42 |
| msgid "// Close the opened bracket and return a fmt::Result value.\n" |
| msgstr "// 열려 있는 대괄호를 닫고 `fmt::Result` 값을 반환합니다.\n" |
| |
| #: src/hello/print/print_display/testcase_list.md:43 |
| msgid "\"]\"" |
| msgstr "\"]\"" |
| |
| #: src/hello/print/print_display/testcase_list.md:55 |
| msgid "" |
| "Try changing the program so that the index of each element in the vector is " |
| "also printed. The new output should look like this:" |
| msgstr "" |
| "벡터의 각 요소의 인덱스도 출력되도록 프로그램을 변경해 보세요. 새로운 출력은 " |
| "다음과 같아야 합니다:" |
| |
| #: src/hello/print/print_display/testcase_list.md:64 |
| msgid "" |
| "[`for`](../../../flow_control/for.md), [`ref`](../../../scope/borrow/" |
| "ref.md), [`Result`](../../../std/result.md), [`struct`](../../../" |
| "custom_types/structs.md), [`?`](../../../std/result/question_mark.md), and " |
| "[`vec!`](../../../std/vec.md)" |
| msgstr "" |
| "[`for`](../../../flow_control/for.md), [`ref`](../../../scope/borrow/" |
| "ref.md), [`Result`](../../../std/result.md), [`구조체`](../../../" |
| "custom_types/structs.md), [`?`](../../../std/result/question_mark.md), 그리" |
| "고 [`vec!`](../../../std/vec.md)" |
| |
| #: src/hello/print/fmt.md:3 |
| msgid "We've seen that formatting is specified via a _format string_:" |
| msgstr "형식화는 _형식 문자열_을 통해 지정되는 것을 보았습니다:" |
| |
| #: src/hello/print/fmt.md:5 |
| msgid "`format!(\"{}\", foo)` -> `\"3735928559\"`" |
| msgstr "`format!(\"{}\", foo)` -> `\"3735928559\"`" |
| |
| #: src/hello/print/fmt.md:6 |
| msgid "" |
| "`format!(\"0x{:X}\", foo)` -> [`\"0xDEADBEEF\"`](https://en.wikipedia.org/" |
| "wiki/Deadbeef#Magic_debug_values)" |
| msgstr "" |
| "`format!(\"0x{:X}\", foo)` -> [`\"0xDEADBEEF\"`](https://en.wikipedia.org/" |
| "wiki/Deadbeef#Magic_debug_values)" |
| |
| #: src/hello/print/fmt.md:7 |
| msgid "`format!(\"0o{:o}\", foo)` -> `\"0o33653337357\"`" |
| msgstr "`format!(\"0o{:o}\", foo)` -> `\"0o33653337357\"`" |
| |
| #: src/hello/print/fmt.md:9 |
| msgid "" |
| "The same variable (`foo`) can be formatted differently depending on which " |
| "_argument type_ is used: `X` vs `o` vs _unspecified_." |
| msgstr "" |
| "동일한 변수(`foo`)라도 `X`, `o` 또는 _지정되지 않음_과 같이 어떤 _인자 타입_" |
| "이 사용되느냐에 따라 다르게 형식화될 수 있습니다." |
| |
| #: src/hello/print/fmt.md:12 |
| msgid "" |
| "This formatting functionality is implemented via traits, and there is one " |
| "trait for each argument type. The most common formatting trait is `Display`, " |
| "which handles cases where the argument type is left unspecified: `{}` for " |
| "instance." |
| msgstr "" |
| "이 형식화 기능은 트레이트를 통해 구현되며, 각 인자 타입에 대해 하나의 트레이" |
| "트가 존재합니다. 가장 일반적인 형식화 트레이트는 `Display`이며, 인자 타입이 " |
| "지정되지 않은 경우(예: `{}`)를 처리합니다." |
| |
| #: src/hello/print/fmt.md:21 |
| msgid "// Latitude\n" |
| msgstr "// 위도\n" |
| |
| #: src/hello/print/fmt.md:23 |
| msgid "// Longitude\n" |
| msgstr "// 경도\n" |
| |
| #: src/hello/print/fmt.md:28 |
| msgid "" |
| "// `f` is a buffer, and this method must write the formatted string into " |
| "it.\n" |
| msgstr "// `f`는 버퍼이며, 이 메서드는 버퍼에 형식화된 문자열을 써야 합니다.\n" |
| |
| #: src/hello/print/fmt.md:30 |
| msgid "'N'" |
| msgstr "'북'" |
| |
| #: src/hello/print/fmt.md:30 |
| msgid "'S'" |
| msgstr "'남'" |
| |
| #: src/hello/print/fmt.md:31 |
| msgid "'E'" |
| msgstr "'동'" |
| |
| #: src/hello/print/fmt.md:31 |
| msgid "'W'" |
| msgstr "'서'" |
| |
| #: src/hello/print/fmt.md:33 |
| msgid "" |
| "// `write!` is like `format!`, but it will write the formatted string\n" |
| " // into a buffer (the first argument).\n" |
| msgstr "" |
| "// `write!`는 `format!`과 비슷하지만, 형식화된 문자열을\n" |
| " // 버퍼(첫 번째 인자)에 씁니다.\n" |
| |
| #: src/hello/print/fmt.md:35 |
| msgid "\"{}: {:.3}°{} {:.3}°{}\"" |
| msgstr "\"{}: {:.3}°{} {:.3}°{}\"" |
| |
| #: src/hello/print/fmt.md:49 |
| msgid "\"Dublin\"" |
| msgstr "\"더블린\"" |
| |
| #: src/hello/print/fmt.md:50 |
| msgid "\"Oslo\"" |
| msgstr "\"오슬로\"" |
| |
| #: src/hello/print/fmt.md:51 |
| msgid "\"Vancouver\"" |
| msgstr "\"밴쿠버\"" |
| |
| #: src/hello/print/fmt.md:60 |
| msgid "" |
| "// Switch this to use {} once you've added an implementation\n" |
| " // for fmt::Display.\n" |
| msgstr "// fmt::Display 구현을 추가한 후에는 {}를 사용하도록 변경하세요.\n" |
| |
| #: src/hello/print/fmt.md:62 src/primitives/tuples.md:60 |
| #: src/custom_types/structs.md:47 src/types/inference.md:23 |
| #: src/conversion/string.md:76 src/generics/bounds.md:49 |
| #: src/generics/where.md:38 src/std/str.md:137 src/std/result.md:59 |
| #: src/std/result.md:61 src/std/result.md:63 src/std/arc.md:26 |
| #: src/std_misc/channels.md:53 |
| msgid "\"{:?}\"" |
| msgstr "\"{:?}\"" |
| |
| #: src/hello/print/fmt.md:67 |
| msgid "" |
| "You can view a [full list of formatting traits](https://doc.rust-lang.org/" |
| "std/fmt/#formatting-traits) and their argument types in the [`std::fmt`]" |
| "(https://doc.rust-lang.org/std/fmt/) documentation." |
| msgstr "" |
| "[`std::fmt`](https://doc.rust-lang.org/std/fmt/) 문서에서 [형식화 트레이트 전" |
| "체 목록](https://doc.rust-lang.org/std/fmt/#formatting-traits)과 해당 인자 타" |
| "입을 확인할 수 있습니다." |
| |
| #: src/hello/print/fmt.md:72 |
| msgid "" |
| "Add an implementation of the `fmt::Display` trait for the `Color` struct " |
| "above so that the output displays as:" |
| msgstr "" |
| "위의 `Color` 구조체에 `fmt::Display` 트레이트 구현을 추가하여 다음과 같이 출" |
| "력되도록 하세요:" |
| |
| #: src/hello/print/fmt.md:81 |
| msgid "Two hints if you get stuck:" |
| msgstr "막혔을 때를 위한 두 가지 힌트:" |
| |
| #: src/hello/print/fmt.md:83 |
| msgid "" |
| "You [may need to list each color more than once](https://doc.rust-lang.org/" |
| "std/fmt/#named-parameters)." |
| msgstr "" |
| "[각 색상을 두 번 이상 나열해야 할 수도 있습니다](https://doc.rust-lang.org/" |
| "std/fmt/#named-parameters)." |
| |
| #: src/hello/print/fmt.md:84 |
| msgid "" |
| "You can [pad with zeros to a width of 2](https://doc.rust-lang.org/std/fmt/" |
| "#width) with `:0>2`. For hexadecimals, you can use `:02X`." |
| msgstr "" |
| "`:0>2`를 사용하여 [0을 채워 너비를 2로 맞출](https://doc.rust-lang.org/std/" |
| "fmt/#width) 수 있습니다. 16진수의 경우 `:02X`를 사용할 수 있습니다." |
| |
| #: src/hello/print/fmt.md:87 |
| msgid "Bonus:" |
| msgstr "보너스:" |
| |
| #: src/hello/print/fmt.md:89 |
| msgid "" |
| "If you would like to experiment with [type casting](../../types/cast.md) in " |
| "advance, the formula for [calculating a color in the RGB color space]" |
| "(https://www.rapidtables.com/web/color/RGB_Color.html#rgb-format) is `RGB = " |
| "(R * 65_536) + (G * 256) + B`, where `R is RED, G is GREEN, and B is BLUE`. " |
| "An unsigned 8-bit integer (`u8`) can only hold numbers up to 255. To cast " |
| "`u8` to `u32`, you can write `variable_name as u32`." |
| msgstr "" |
| "[타입 변환(type casting)](../../types/cast.md)을 미리 실험해보고 싶다면, " |
| "[RGB 색 공간에서 색상을 계산하는 공식](https://www.rapidtables.com/web/color/" |
| "RGB_Color.html#rgb-format)은 `RGB = (R * 65_536) + (G * 256) + B`이며, 여기" |
| "서 `R은 RED, G는 GREEN, B는 BLUE`입니다. 부호 없는 8비트 정수(`u8`)는 255까지" |
| "의 숫자만 담을 수 있습니다. `u8`을 `u32`로 변환하려면 `variable_name as u32`" |
| "와 같이 쓸 수 있습니다." |
| |
| #: src/hello/print/fmt.md:96 |
| msgid "[`std::fmt`](https://doc.rust-lang.org/std/fmt/)" |
| msgstr "[`std::fmt`](https://doc.rust-lang.org/std/fmt/)" |
| |
| #: src/primitives.md:3 |
| msgid "" |
| "Rust provides access to a wide variety of `primitives`. A sample includes:" |
| msgstr "" |
| "Rust는 다양한 `기본 자료형(primitives)`에 대한 접근을 제공합니다. 샘플은 다음" |
| "과 같습니다:" |
| |
| #: src/primitives.md:5 |
| msgid "Scalar Types" |
| msgstr "스칼라 타입" |
| |
| #: src/primitives.md:7 |
| msgid "" |
| "Signed integers: `i8`, `i16`, `i32`, `i64`, `i128` and `isize` (pointer size)" |
| msgstr "" |
| "부호 있는 정수: `i8`, `i16`, `i32`, `i64`, `i128` 및 `isize` (포인터 크기)" |
| |
| #: src/primitives.md:8 |
| msgid "" |
| "Unsigned integers: `u8`, `u16`, `u32`, `u64`, `u128` and `usize` (pointer " |
| "size)" |
| msgstr "" |
| "부호 없는 정수: `u8`, `u16`, `u32`, `u64`, `u128` 및 `usize` (포인터 크기)" |
| |
| #: src/primitives.md:10 |
| msgid "Floating point: `f32`, `f64`" |
| msgstr "부동 소수점: `f32`, `f64`" |
| |
| #: src/primitives.md:11 |
| msgid "`char` Unicode scalar values like `'a'`, `'α'` and `'∞'` (4 bytes each)" |
| msgstr "`char` 유니코드 스칼라 값: `'a'`, `'α'`, `'∞'` 등 (각 4바이트)" |
| |
| #: src/primitives.md:12 |
| msgid "`bool` either `true` or `false`" |
| msgstr "`bool`: `true` 또는 `false`" |
| |
| #: src/primitives.md:13 |
| msgid "The unit type `()`, whose only possible value is an empty tuple: `()`" |
| msgstr "유닛 타입 `()`: 가능한 유일한 값은 빈 튜플 `()`입니다." |
| |
| #: src/primitives.md:15 |
| msgid "" |
| "Despite the value of a unit type being a tuple, it is not considered a " |
| "compound type because it does not contain multiple values." |
| msgstr "" |
| "유닛 타입의 값이 튜플임에도 불구하고, 여러 값을 포함하지 않기 때문에 복합 타" |
| "입(compound type)으로 간주되지 않습니다." |
| |
| #: src/primitives.md:18 |
| msgid "Compound Types" |
| msgstr "복합 타입" |
| |
| #: src/primitives.md:20 |
| msgid "Arrays like `[1, 2, 3]`" |
| msgstr "`[1, 2, 3]`과 같은 배열" |
| |
| #: src/primitives.md:21 |
| msgid "Tuples like `(1, true)`" |
| msgstr "`(1, true)`와 같은 튜플" |
| |
| #: src/primitives.md:23 |
| msgid "" |
| "Variables can always be _type annotated_. Numbers may additionally be " |
| "annotated via a _suffix_ or _by default_. Integers default to `i32` and " |
| "floats to `f64`. Note that Rust can also infer types from context." |
| msgstr "" |
| "변수는 항상 _타입 어노테이션_이 가능합니다. 숫자는 추가적으로 _접미사" |
| "(suffix)_를 통하거나 _기본값_으로 어노테이션될 수 있습니다. 정수 기본값은 " |
| "`i32`이고 부동 소수점 기본값은 `f64`입니다. 또한 Rust는 문맥으로부터 타입을 " |
| "추론할 수도 있습니다." |
| |
| #: src/primitives.md:29 |
| msgid "// Variables can be type annotated.\n" |
| msgstr "// 변수는 타입 어노테이션이 가능합니다.\n" |
| |
| #: src/primitives.md:32 |
| msgid "// Regular annotation\n" |
| msgstr "// 일반적인 어노테이션\n" |
| |
| #: src/primitives.md:33 |
| msgid "// Suffix annotation\n" |
| msgstr "// 접미사 어노테이션\n" |
| |
| #: src/primitives.md:35 |
| msgid "// Or a default will be used.\n" |
| msgstr "// 혹은 기본값이 사용됩니다.\n" |
| |
| #: src/primitives.md:36 |
| msgid "// `f64`\n" |
| msgstr "// `f64`\n" |
| |
| #: src/primitives.md:37 |
| msgid "// `i32`\n" |
| msgstr "// `i32`\n" |
| |
| #: src/primitives.md:39 |
| msgid "// A type can also be inferred from context.\n" |
| msgstr "// 타입을 문맥에서 추론할 수도 있습니다.\n" |
| |
| #: src/primitives.md:40 |
| msgid "// Type i64 is inferred from another line.\n" |
| msgstr "// i64 타입이 다른 줄에서 추론됩니다.\n" |
| |
| #: src/primitives.md:43 |
| msgid "// A mutable variable's value can be changed.\n" |
| msgstr "// 가변 변수의 값은 변경될 수 있습니다.\n" |
| |
| #: src/primitives.md:44 |
| msgid "// Mutable `i32`\n" |
| msgstr "// 가변 `i32`\n" |
| |
| #: src/primitives.md:47 |
| msgid "// Error! The type of a variable can't be changed.\n" |
| msgstr "// 에러! 변수의 타입은 변경할 수 없습니다.\n" |
| |
| #: src/primitives.md:50 |
| msgid "// Variables can be overwritten with shadowing.\n" |
| msgstr "// 변수는 섀도잉(shadowing)을 통해 덮어쓸 수 있습니다.\n" |
| |
| #: src/primitives.md:53 |
| msgid "/* Compound types - Array and Tuple */" |
| msgstr "/* 복합 타입 - 배열과 튜플 */" |
| |
| #: src/primitives.md:55 |
| msgid "// Array signature consists of Type T and length as [T; length].\n" |
| msgstr "// 배열 시그니처는 타입 T와 길이를 포함하여 [T; length] 형식입니다.\n" |
| |
| #: src/primitives.md:58 |
| msgid "" |
| "// Tuple is a collection of values of different types\n" |
| " // and is constructed using parentheses ().\n" |
| msgstr "" |
| "// 튜플은 서로 다른 타입의 값들을 모아놓은 것이며\n" |
| " // 소괄호 ()를 사용하여 구성됩니다.\n" |
| |
| #: src/primitives.md:66 |
| msgid "" |
| "[the `std` library](https://doc.rust-lang.org/std/), [`mut`]" |
| "(variable_bindings/mut.md), [`inference`](types/inference.md), and " |
| "[`shadowing`](variable_bindings/scope.md)" |
| msgstr "" |
| "[`std` 라이브러리](https://doc.rust-lang.org/std/), [`mut`]" |
| "(variable_bindings/mut.md), [`추론(inference)`](types/inference.md), 그리고 " |
| "[`섀도잉(shadowing)`](variable_bindings/scope.md)" |
| |
| #: src/primitives/literals.md:3 |
| msgid "" |
| "Integers `1`, floats `1.2`, characters `'a'`, strings `\"abc\"`, booleans " |
| "`true` and the unit type `()` can be expressed using literals." |
| msgstr "" |
| "정수 `1`, 부동 소수점 `1.2`, 문자 `'a'`, 문자열 `\"abc\"`, 불리언 `true` 그리" |
| "고 유닛 타입 `()`은 리터럴을 사용하여 표현할 수 있습니다." |
| |
| #: src/primitives/literals.md:6 |
| msgid "" |
| "Integers can, alternatively, be expressed using hexadecimal, octal or binary " |
| "notation using these prefixes respectively: `0x`, `0o` or `0b`." |
| msgstr "" |
| "정수는 또한 `0x`, `0o`, `0b` 접두사를 사용하여 각각 16진수, 8진수, 2진수 표기" |
| "법으로 표현할 수 있습니다." |
| |
| #: src/primitives/literals.md:9 |
| msgid "" |
| "Underscores can be inserted in numeric literals to improve readability, e.g. " |
| "`1_000` is the same as `1000`, and `0.000_001` is the same as `0.000001`." |
| msgstr "" |
| "가독성을 높이기 위해 숫자 리터럴에 언더스코어(_)를 삽입할 수 있습니다. 예를 " |
| "들어 `1_000`은 `1000`과 같고, `0.000_001`은 `0.000001`과 같습니다." |
| |
| #: src/primitives/literals.md:12 |
| msgid "" |
| "Rust also supports scientific [E-notation](https://en.wikipedia.org/wiki/" |
| "Scientific_notation#E_notation), e.g. `1e6`, `7.6e-4`. The associated type " |
| "is `f64`." |
| msgstr "" |
| "Rust는 또한 과학적 기수법([E-표기법](https://en.wikipedia.org/wiki/" |
| "Scientific_notation#E_notation))을 지원합니다. (예: `1e6`, `7.6e-4`). 관련 타" |
| "입은 `f64`입니다." |
| |
| #: src/primitives/literals.md:15 |
| msgid "" |
| "We need to tell the compiler the type of the literals we use. For now, we'll " |
| "use the `u32` suffix to indicate that the literal is an unsigned 32-bit " |
| "integer, and the `i32` suffix to indicate that it's a signed 32-bit integer." |
| msgstr "" |
| "우리는 사용하는 리터럴의 타입을 컴파일러에게 알려주어야 합니다. 당분간은 부" |
| "호 없는 32비트 정수임을 나타내기 위해 `u32` 접미사를 사용하고, 부호 있는 32비" |
| "트 정수임을 나타내기 위해 `i32` 접미사를 사용할 것입니다." |
| |
| #: src/primitives/literals.md:19 |
| msgid "" |
| "The operators available and their precedence [in Rust](https://doc.rust-" |
| "lang.org/reference/expressions.html#expression-precedence) are similar to " |
| "other [C-like languages](https://en.wikipedia.org/wiki/" |
| "Operator_precedence#Programming_languages)." |
| msgstr "" |
| "[Rust에서의](https://doc.rust-lang.org/reference/expressions.html#expression-" |
| "precedence) 사용 가능한 연산자와 우선순위는 다른 [C 계열 언어들](https://" |
| "en.wikipedia.org/wiki/Operator_precedence#Programming_languages)과 유사합니" |
| "다." |
| |
| #: src/primitives/literals.md:24 |
| msgid "// Integer addition\n" |
| msgstr "// 정수 덧셈\n" |
| |
| #: src/primitives/literals.md:25 |
| msgid "\"1 + 2 = {}\"" |
| msgstr "\"1 + 2 = {}\"" |
| |
| #: src/primitives/literals.md:27 |
| msgid "// Integer subtraction\n" |
| msgstr "// 정수 뺄셈\n" |
| |
| #: src/primitives/literals.md:28 |
| msgid "\"1 - 2 = {}\"" |
| msgstr "\"1 - 2 = {}\"" |
| |
| #: src/primitives/literals.md:29 |
| msgid "" |
| "// TODO ^ Try changing `1i32` to `1u32` to see why the type is important\n" |
| msgstr "" |
| "// TODO ^ `1i32`를 `1u32`로 변경하여 타입이 중요한 이유를 확인해 보세요\n" |
| |
| #: src/primitives/literals.md:31 |
| msgid "// Scientific notation\n" |
| msgstr "// 과학적 표기법\n" |
| |
| #: src/primitives/literals.md:32 |
| msgid "\"1e4 is {}, -2.5e-3 is {}\"" |
| msgstr "\"1e4는 {}, -2.5e-3은 {}입니다\"" |
| |
| #: src/primitives/literals.md:34 |
| msgid "// Short-circuiting boolean logic\n" |
| msgstr "// 단락(Short-circuiting) 불리언 로직\n" |
| |
| #: src/primitives/literals.md:35 |
| msgid "\"true AND false is {}\"" |
| msgstr "\"true AND false는 {}입니다\"" |
| |
| #: src/primitives/literals.md:36 |
| msgid "\"true OR false is {}\"" |
| msgstr "\"true OR false는 {}입니다\"" |
| |
| #: src/primitives/literals.md:37 |
| msgid "\"NOT true is {}\"" |
| msgstr "\"NOT true는 {}입니다\"" |
| |
| #: src/primitives/literals.md:39 |
| msgid "// Bitwise operations\n" |
| msgstr "// 비트 연산\n" |
| |
| #: src/primitives/literals.md:40 |
| msgid "\"0011 AND 0101 is {:04b}\"" |
| msgstr "\"0011 AND 0101은 {:04b}입니다\"" |
| |
| #: src/primitives/literals.md:41 |
| msgid "\"0011 OR 0101 is {:04b}\"" |
| msgstr "\"0011 OR 0101은 {:04b}입니다\"" |
| |
| #: src/primitives/literals.md:42 |
| msgid "\"0011 XOR 0101 is {:04b}\"" |
| msgstr "\"0011 XOR 0101은 {:04b}입니다\"" |
| |
| #: src/primitives/literals.md:43 |
| msgid "\"1 << 5 is {}\"" |
| msgstr "\"1 << 5는 {}입니다\"" |
| |
| #: src/primitives/literals.md:44 |
| msgid "\"0x80 >> 2 is 0x{:x}\"" |
| msgstr "\"0x80 >> 2는 0x{:x}입니다\"" |
| |
| #: src/primitives/literals.md:46 |
| msgid "// Use underscores to improve readability!\n" |
| msgstr "// 가독성을 높이기 위해 밑줄을 사용하세요!\n" |
| |
| #: src/primitives/literals.md:47 |
| msgid "\"One million is written as {}\"" |
| msgstr "\"백만은 {}로 씁니다\"" |
| |
| #: src/primitives/tuples.md:3 |
| msgid "" |
| "A tuple is a collection of values of different types. Tuples are constructed " |
| "using parentheses `()`, and each tuple itself is a value with type signature " |
| "`(T1, T2, ...)`, where `T1`, `T2` are the types of its members. Functions " |
| "can use tuples to return multiple values, as tuples can hold any number of " |
| "values." |
| msgstr "" |
| "튜플은 서로 다른 타입의 값들의 모음입니다. 튜플은 괄호 `()`를 사용하여 생성되" |
| "며, 각 튜플 자체는 `(T1, T2, ...)` 형태의 타입 시그니처를 가진 값입니다. 여기" |
| "서 `T1`, `T2`는 튜플 멤버의 타입입니다. 튜플은 여러 값을 담을 수 있으므로 함" |
| "수에서 여러 값을 반환하는 데 사용할 수 있습니다." |
| |
| #: src/primitives/tuples.md:9 |
| msgid "// Tuples can be used as function arguments and as return values.\n" |
| msgstr "// 튜플은 함수의 인자와 반환값으로 사용될 수 있습니다.\n" |
| |
| #: src/primitives/tuples.md:11 |
| msgid "// `let` can be used to bind the members of a tuple to variables.\n" |
| msgstr "// `let`을 사용하여 튜플의 멤버를 변수에 바인딩할 수 있습니다.\n" |
| |
| #: src/primitives/tuples.md:16 |
| msgid "// The following struct is for the activity.\n" |
| msgstr "// 다음 구조체는 실습을 위한 것입니다.\n" |
| |
| #: src/primitives/tuples.md:22 |
| msgid "// A tuple with a bunch of different types.\n" |
| msgstr "// 여러 다른 타입을 가진 튜플입니다.\n" |
| |
| #: src/primitives/tuples.md:26 src/generics.md:50 src/generics.md:55 |
| #: src/generics/gen_fn.md:47 |
| msgid "'a'" |
| msgstr "'a'" |
| |
| #: src/primitives/tuples.md:28 |
| msgid "// Values can be extracted from the tuple using tuple indexing.\n" |
| msgstr "// 튜플 인덱싱을 사용하여 튜플에서 값을 추출할 수 있습니다.\n" |
| |
| #: src/primitives/tuples.md:29 |
| msgid "\"Long tuple first value: {}\"" |
| msgstr "\"긴 튜플의 첫 번째 값: {}\"" |
| |
| #: src/primitives/tuples.md:30 |
| msgid "\"Long tuple second value: {}\"" |
| msgstr "\"긴 튜플의 두 번째 값: {}\"" |
| |
| #: src/primitives/tuples.md:32 |
| msgid "// Tuples can be tuple members.\n" |
| msgstr "// 튜플은 튜플의 멤버가 될 수 있습니다.\n" |
| |
| #: src/primitives/tuples.md:35 |
| msgid "// Tuples are printable.\n" |
| msgstr "// 튜플은 출력 가능합니다.\n" |
| |
| #: src/primitives/tuples.md:36 |
| msgid "\"tuple of tuples: {:?}\"" |
| msgstr "\"튜플의 튜플: {:?}\"" |
| |
| #: src/primitives/tuples.md:38 |
| msgid "" |
| "// But long Tuples (more than 12 elements) cannot be printed.\n" |
| " //let too_long_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);\n" |
| " //println!(\"Too long tuple: {:?}\", too_long_tuple);\n" |
| " // TODO ^ Uncomment the above 2 lines to see the compiler error\n" |
| msgstr "" |
| "// 하지만 긴 튜플(요소 12개 초과)은 출력할 수 없습니다.\n" |
| " //let too_long_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);\n" |
| " //println!(\"Too long tuple: {:?}\", too_long_tuple);\n" |
| " // TODO ^ 위의 두 줄의 주석을 해제하여 컴파일 에러를 확인해 보세요\n" |
| |
| #: src/primitives/tuples.md:44 |
| msgid "\"Pair is {:?}\"" |
| msgstr "\"페어는 {:?}입니다\"" |
| |
| #: src/primitives/tuples.md:46 |
| msgid "\"The reversed pair is {:?}\"" |
| msgstr "\"반전된 페어는 {:?}입니다\"" |
| |
| #: src/primitives/tuples.md:48 |
| msgid "" |
| "// To create one element tuples, the comma is required to tell them apart\n" |
| " // from a literal surrounded by parentheses.\n" |
| msgstr "" |
| "// 요소가 하나인 튜플을 만들려면, 괄호로 둘러싸인 리터럴과\n" |
| " // 구분하기 위해 콤마가 필요합니다.\n" |
| |
| #: src/primitives/tuples.md:50 |
| msgid "\"One element tuple: {:?}\"" |
| msgstr "\"요소가 하나인 튜플: {:?}\"" |
| |
| #: src/primitives/tuples.md:51 |
| msgid "\"Just an integer: {:?}\"" |
| msgstr "\"그냥 정수: {:?}\"" |
| |
| #: src/primitives/tuples.md:53 |
| msgid "// Tuples can be destructured to create bindings.\n" |
| msgstr "// 튜플은 구조 분해(destructure)하여 바인딩을 생성할 수 있습니다.\n" |
| |
| #: src/primitives/tuples.md:54 src/conversion/from_into.md:17 |
| #: src/fn/closures/input_parameters.md:52 src/std_misc/fs.md:51 |
| msgid "\"hello\"" |
| msgstr "\"안녕\"" |
| |
| #: src/primitives/tuples.md:57 |
| msgid "\"{:?}, {:?}, {:?}, {:?}\"" |
| msgstr "\"{:?}, {:?}, {:?}, {:?}\"" |
| |
| #: src/primitives/tuples.md:66 |
| msgid "" |
| "_Recap_: Add the `fmt::Display` trait to the `Matrix` struct in the above " |
| "example, so that if you switch from printing the debug format `{:?}` to the " |
| "display format `{}`, you see the following output:" |
| msgstr "" |
| "_요약_: 위 예제의 `Matrix` 구조체에 `fmt::Display` 트레이트를 추가하여, 디버" |
| "그 형식 `{:?}`에서 디스플레이 형식 `{}`로 출력을 전환했을 때 다음과 같은 출력" |
| "이 나오도록 하세요:" |
| |
| #: src/primitives/tuples.md:75 |
| msgid "" |
| "You may want to refer back to the example for [print display](../hello/print/" |
| "print_display.md)." |
| msgstr "" |
| "[표시 출력](../hello/print/print_display.md)에 대한 예제를 다시 참조하고 싶" |
| "을 수도 있습니다." |
| |
| #: src/primitives/tuples.md:76 |
| msgid "" |
| "Add a `transpose` function using the `reverse` function as a template, which " |
| "accepts a matrix as an argument, and returns a matrix in which two elements " |
| "have been swapped. For example:" |
| msgstr "" |
| "`reverse` 함수를 템플릿으로 사용하여 `transpose` 함수를 추가하세요. 이 함수" |
| "는 행렬을 인자로 받아 두 요소가 바뀐 행렬을 반환합니다. 예를 들어:" |
| |
| #: src/primitives/tuples.md:81 |
| msgid "\"Matrix:\\n{}\"" |
| msgstr "\"행렬:\\n{}\"" |
| |
| #: src/primitives/tuples.md:82 |
| msgid "\"Transpose:\\n{}\"" |
| msgstr "\"전치(Transpose):\\n{}\"" |
| |
| #: src/primitives/tuples.md:85 |
| msgid "Results in the output:" |
| msgstr "출력 결과:" |
| |
| #: src/primitives/array.md:3 |
| msgid "" |
| "An array is a collection of objects of the same type `T`, stored in " |
| "contiguous memory. Arrays are created using brackets `[]`, and their length, " |
| "which is known at compile time, is part of their type signature `[T; " |
| "length]`." |
| msgstr "" |
| "배열은 연속된 메모리에 저장된 동일한 타입 `T`를 가진 객체들의 모음입니다. 배" |
| "열은 대괄호 `[]`를 사용하여 생성되며, 컴파일 타임에 알려진 배열의 길이는 타" |
| "입 시그니처 `[T; length]`의 일부가 됩니다." |
| |
| #: src/primitives/array.md:7 |
| msgid "" |
| "Slices are similar to arrays, but their length is not known at compile time. " |
| "Instead, a slice is a two-word object; the first word is a pointer to the " |
| "data, the second word is the length of the slice. The word size is the same " |
| "as usize, determined by the processor architecture, e.g. 64 bits on an " |
| "x86-64. Slices can be used to borrow a section of an array and have the type " |
| "signature `&[T]`." |
| msgstr "" |
| "슬라이스는 배열과 유사하지만, 컴파일 타임에 그 길이를 알 수 없습니다. 대신, " |
| "슬라이스는 두 개의 워드(word)로 구성된 객체입니다. 첫 번째 워드는 데이터에 대" |
| "한 포인터이고, 두 번째 워드는 슬라이스의 길이입니다. 워드 크기는 프로세서 아" |
| "키텍처에 의해 결정되는 usize와 같으며, 예를 들어 x86-64에서는 64비트입니다. " |
| "슬라이스는 배열의 일부분을 빌려오는 데 사용될 수 있으며 `&[T]`라는 타입 시그" |
| "니처를 가집니다." |
| |
| #: src/primitives/array.md:15 |
| msgid "// This function borrows a slice.\n" |
| msgstr "// 이 함수는 슬라이스를 빌려옵니다.\n" |
| |
| #: src/primitives/array.md:18 |
| msgid "\"First element of the slice: {}\"" |
| msgstr "\"슬라이스의 첫 번째 요소: {}\"" |
| |
| #: src/primitives/array.md:19 |
| msgid "\"The slice has {} elements\"" |
| msgstr "\"슬라이스는 {}개의 요소를 가지고 있습니다\"" |
| |
| #: src/primitives/array.md:23 |
| msgid "// Fixed-size array (type signature is superfluous).\n" |
| msgstr "// 고정 크기 배열 (타입 시그니처는 생략 가능합니다).\n" |
| |
| #: src/primitives/array.md:26 |
| msgid "// All elements can be initialized to the same value.\n" |
| msgstr "// 모든 요소를 동일한 값으로 초기화할 수 있습니다.\n" |
| |
| #: src/primitives/array.md:29 |
| msgid "// Indexing starts at 0.\n" |
| msgstr "// 인덱싱은 0부터 시작합니다.\n" |
| |
| #: src/primitives/array.md:30 |
| msgid "\"First element of the array: {}\"" |
| msgstr "\"배열의 첫 번째 요소: {}\"" |
| |
| #: src/primitives/array.md:31 |
| msgid "\"Second element of the array: {}\"" |
| msgstr "\"배열의 두 번째 요소: {}\"" |
| |
| #: src/primitives/array.md:33 |
| msgid "// `len` returns the count of elements in the array.\n" |
| msgstr "// `len`은 배열의 요소 개수를 반환합니다.\n" |
| |
| #: src/primitives/array.md:34 |
| msgid "\"Number of elements in array: {}\"" |
| msgstr "\"배열의 요소 개수: {}\"" |
| |
| #: src/primitives/array.md:36 |
| msgid "// Arrays are stack allocated.\n" |
| msgstr "// 배열은 스택에 할당됩니다.\n" |
| |
| #: src/primitives/array.md:37 |
| msgid "\"Array occupies {} bytes\"" |
| msgstr "\"배열의 점유 메모리: {} 바이트\"" |
| |
| #: src/primitives/array.md:39 |
| msgid "// Arrays can be automatically borrowed as slices.\n" |
| msgstr "// 배열은 자동으로 슬라이스로 빌려올 수 있습니다.\n" |
| |
| #: src/primitives/array.md:40 |
| msgid "\"Borrow the whole array as a slice.\"" |
| msgstr "\"배열 전체를 슬라이스로 빌려옵니다.\"" |
| |
| #: src/primitives/array.md:43 |
| msgid "" |
| "// Slices can point to a section of an array.\n" |
| " // They are of the form [starting_index..ending_index].\n" |
| " // `starting_index` is the first position in the slice.\n" |
| " // `ending_index` is one more than the last position in the slice.\n" |
| msgstr "" |
| "// 슬라이스는 배열의 한 섹션을 가리킬 수 있습니다.\n" |
| " // [시작_인덱스..종료_인덱스] 형태입니다.\n" |
| " // `시작_인덱스`는 슬라이스의 첫 번째 위치입니다.\n" |
| " // `종료_인덱스`는 슬라이스의 마지막 위치보다 하나 더 큰 값입니다.\n" |
| |
| #: src/primitives/array.md:47 |
| msgid "\"Borrow a section of the array as a slice.\"" |
| msgstr "\"배열의 한 섹션을 슬라이스로 빌려옵니다.\"" |
| |
| #: src/primitives/array.md:50 |
| msgid "// Example of empty slice `&[]`:\n" |
| msgstr "// 빈 슬라이스 `&[]`의 예시:\n" |
| |
| #: src/primitives/array.md:53 |
| msgid "// Same but more verbose\n" |
| msgstr "// 동일하지만 더 장황한 표현\n" |
| |
| #: src/primitives/array.md:55 |
| msgid "" |
| "// Arrays can be safely accessed using `.get`, which returns an\n" |
| " // `Option`. This can be matched as shown below, or used with\n" |
| " // `.expect()` if you would like the program to exit with a nice\n" |
| " // message instead of happily continue.\n" |
| msgstr "" |
| "// 배열은 `.get`을 사용하여 안전하게 접근할 수 있으며, 이는 `Option`을 반환합" |
| "니다.\n" |
| " // 이는 아래와 같이 매치(match)될 수 있으며, 프로그램을 계속 진행하는 대" |
| "신\n" |
| " // 친절한 메시지와 함께 종료하고 싶다면 `.expect()`와 함께 사용될 수 있습" |
| "니다.\n" |
| |
| #: src/primitives/array.md:59 |
| msgid "// Oops, one element too far!\n" |
| msgstr "// 이런, 범위를 하나 벗어났네요!\n" |
| |
| #: src/primitives/array.md:61 |
| msgid "\"{}: {}\"" |
| msgstr "\"{}: {}\"" |
| |
| #: src/primitives/array.md:62 |
| msgid "\"Slow down! {} is too far!\"" |
| msgstr "\"진정하세요! {}는 너무 멀리 갔습니다!\"" |
| |
| #: src/primitives/array.md:66 |
| msgid "" |
| "// Out of bound indexing on array with constant value causes compile time " |
| "error.\n" |
| " //println!(\"{}\", xs[5]);\n" |
| " // Out of bound indexing on slice causes runtime error.\n" |
| " //println!(\"{}\", xs[..][5]);\n" |
| msgstr "" |
| "// 상수 값을 사용한 배열의 범위를 벗어난 인덱싱은 컴파일 타임 에러를 발생시킵" |
| "니다.\n" |
| " //println!(\"{}\", xs[5]);\n" |
| " // 슬라이스에서 범위를 벗어난 인덱싱은 런타임 에러를 발생시킵니다.\n" |
| " //println!(\"{}\", xs[..][5]);\n" |
| |
| #: src/custom_types.md:3 |
| msgid "Rust custom data types are formed mainly through the two keywords:" |
| msgstr "" |
| "Rust의 사용자 정의 데이터 타입은 주로 다음 두 키워드를 통해 형성됩니다:" |
| |
| #: src/custom_types.md:5 |
| msgid "`struct`: define a structure" |
| msgstr "`struct`: 구조체를 정의합니다" |
| |
| #: src/custom_types.md:6 |
| msgid "`enum`: define an enumeration" |
| msgstr "`enum`: 열거형을 정의합니다" |
| |
| #: src/custom_types.md:8 |
| msgid "Constants can also be created via the `const` and `static` keywords." |
| msgstr "상수는 `const`와 `static` 키워드를 통해 생성할 수 있습니다." |
| |
| #: src/custom_types/structs.md:3 |
| msgid "" |
| "There are three types of structures (\"structs\") that can be created using " |
| "the `struct` keyword:" |
| msgstr "" |
| "`struct` 키워드를 사용하여 생성할 수 있는 구조체(\"structs\")에는 세 가지 유" |
| "형이 있습니다:" |
| |
| #: src/custom_types/structs.md:6 |
| msgid "Tuple structs, which are, basically, named tuples." |
| msgstr "기본적으로 이름이 붙은 튜플인 튜플 구조체." |
| |
| #: src/custom_types/structs.md:7 |
| msgid "" |
| "The classic [C structs](https://en.wikipedia.org/wiki/" |
| "Struct_(C_programming_language))" |
| msgstr "" |
| "전통적인 [C 구조체](https://en.wikipedia.org/wiki/" |
| "Struct_(C_programming_language))" |
| |
| #: src/custom_types/structs.md:8 |
| msgid "Unit structs, which are field-less, are useful for generics." |
| msgstr "필드가 없는 유닛 구조체로, 제네릭에 유용합니다." |
| |
| #: src/custom_types/structs.md:11 src/custom_types/enum/enum_use.md:6 |
| #: src/custom_types/enum/c_like.md:6 |
| msgid "// An attribute to hide warnings for unused code.\n" |
| msgstr "// 사용되지 않는 코드에 대한 경고를 숨기기 위한 속성입니다.\n" |
| |
| #: src/custom_types/structs.md:19 |
| msgid "// A unit struct\n" |
| msgstr "// 유닛 구조체\n" |
| |
| #: src/custom_types/structs.md:22 |
| msgid "// A tuple struct\n" |
| msgstr "// 튜플 구조체\n" |
| |
| #: src/custom_types/structs.md:25 |
| msgid "// A struct with two fields\n" |
| msgstr "// 두 개의 필드를 가진 구조체\n" |
| |
| #: src/custom_types/structs.md:31 |
| msgid "// Structs can be reused as fields of another struct\n" |
| msgstr "// 구조체는 다른 구조체의 필드로 재사용될 수 있습니다.\n" |
| |
| #: src/custom_types/structs.md:34 |
| msgid "" |
| "// A rectangle can be specified by where the top left and bottom right\n" |
| " // corners are in space.\n" |
| msgstr "" |
| "// 사각형은 공간상에서 왼쪽 위와 오른쪽 아래 모서리의 위치로 지정될 수 있습니" |
| "다.\n" |
| |
| #: src/custom_types/structs.md:41 |
| msgid "// Create struct with field init shorthand\n" |
| msgstr "// 필드 초기화 축약형(field init shorthand)으로 구조체를 생성합니다.\n" |
| |
| #: src/custom_types/structs.md:46 |
| msgid "// Print debug struct\n" |
| msgstr "// 디버그용 구조체 출력\n" |
| |
| #: src/custom_types/structs.md:49 |
| msgid "// Instantiate a `Point`\n" |
| msgstr "// `Point` 인스턴스 생성\n" |
| |
| #: src/custom_types/structs.md:53 |
| msgid "// Access the fields of the point\n" |
| msgstr "// 좌표의 필드에 접근\n" |
| |
| #: src/custom_types/structs.md:54 |
| msgid "\"point coordinates: ({}, {})\"" |
| msgstr "\"좌표 좌표: ({}, {})\"" |
| |
| #: src/custom_types/structs.md:56 |
| msgid "" |
| "// Make a new point by using struct update syntax to use the fields of our\n" |
| " // other one\n" |
| msgstr "" |
| "// 구조체 업데이트 구문을 사용하여 다른 포인트의 필드를 활용해\n" |
| " // 새로운 포인트를 만듭니다.\n" |
| |
| #: src/custom_types/structs.md:60 |
| msgid "" |
| "// `bottom_right.y` will be the same as `another_point.y` because we used " |
| "that field\n" |
| " // from `another_point`\n" |
| msgstr "" |
| "// `another_point`의 필드를 사용했으므로 `bottom_right.y`는 `another_point.y`" |
| "와 동일합니다.\n" |
| |
| #: src/custom_types/structs.md:62 |
| msgid "\"second point: ({}, {})\"" |
| msgstr "\"두 번째 좌표: ({}, {})\"" |
| |
| #: src/custom_types/structs.md:64 |
| msgid "// Destructure the point using a `let` binding\n" |
| msgstr "// `let` 바인딩을 사용하여 좌표를 구조 분해합니다.\n" |
| |
| #: src/custom_types/structs.md:68 |
| msgid "// struct instantiation is an expression too\n" |
| msgstr "// 구조체 인스턴스 생성은 표현식이기도 합니다.\n" |
| |
| #: src/custom_types/structs.md:73 |
| msgid "// Instantiate a unit struct\n" |
| msgstr "// 유닛 구조체 인스턴스 생성\n" |
| |
| #: src/custom_types/structs.md:76 |
| msgid "// Instantiate a tuple struct\n" |
| msgstr "// 튜플 구조체 인스턴스 생성\n" |
| |
| #: src/custom_types/structs.md:79 |
| msgid "// Access the fields of a tuple struct\n" |
| msgstr "// 튜플 구조체의 필드에 접근\n" |
| |
| #: src/custom_types/structs.md:80 src/custom_types/structs.md:85 |
| msgid "\"pair contains {:?} and {:?}\"" |
| msgstr "\"페어는 {:?}와 {:?}를 포함합니다\"" |
| |
| #: src/custom_types/structs.md:82 |
| msgid "// Destructure a tuple struct\n" |
| msgstr "// 튜플 구조체 구조 분해\n" |
| |
| #: src/custom_types/structs.md:91 |
| msgid "" |
| "Add a function `rect_area` which calculates the area of a `Rectangle` (try " |
| "using nested destructuring)." |
| msgstr "" |
| "`Rectangle`의 넓이를 계산하는 `rect_area` 함수를 추가하세요. (중첩된 구조 분" |
| "해를 사용해 보세요)." |
| |
| #: src/custom_types/structs.md:93 |
| msgid "" |
| "Add a function `square` which takes a `Point` and a `f32` as arguments, and " |
| "returns a `Rectangle` with its top left corner on the point, and a width and " |
| "height corresponding to the `f32`." |
| msgstr "" |
| "`Point`와 `f32`를 인자로 받아, 해당 포인트를 왼쪽 위 모서리로 하고 `f32`에 해" |
| "당하는 너비와 높이를 가진 `Rectangle`을 반환하는 `square` 함수를 추가하세요." |
| |
| #: src/custom_types/structs.md:97 |
| msgid "See also" |
| msgstr "참고" |
| |
| #: src/custom_types/structs.md:99 |
| msgid "" |
| "[`attributes`](../attribute.md), [raw identifiers](../compatibility/" |
| "raw_identifiers.md) and [destructuring](../flow_control/match/" |
| "destructuring.md)" |
| msgstr "" |
| "[`속성`](../attribute.md), [raw 식별자](../compatibility/raw_identifiers.md) " |
| "및 [구조 분해](../flow_control/match/destructuring.md)" |
| |
| #: src/custom_types/enum.md:3 |
| msgid "" |
| "The `enum` keyword allows the creation of a type which may be one of a few " |
| "different variants. Any variant which is valid as a `struct` is also valid " |
| "in an `enum`." |
| msgstr "" |
| "`enum` 키워드는 몇 가지 다른 변체 중 하나일 수 있는 타입을 생성할 수 있게 합" |
| "니다. `struct`로 유효한 모든 변체는 `enum`에서도 유효합니다." |
| |
| #: src/custom_types/enum.md:8 |
| msgid "" |
| "// Create an `enum` to classify a web event. Note how both\n" |
| "// names and type information together specify the variant:\n" |
| "// `PageLoad != PageUnload` and `KeyPress(char) != Paste(String)`.\n" |
| "// Each is different and independent.\n" |
| msgstr "" |
| "// 웹 이벤트를 분류하기 위한 `enum`을 생성합니다. 이름과 타입 정보가\n" |
| "// 함께 변체를 지정하는 방식에 주목하세요:\n" |
| "// `PageLoad != PageUnload` 이고 `KeyPress(char) != Paste(String)` 입니다.\n" |
| "// 각각은 서로 다르고 독립적입니다.\n" |
| |
| #: src/custom_types/enum.md:13 |
| msgid "// An `enum` variant may either be `unit-like`,\n" |
| msgstr "// `enum` 변체는 유닛 형태(unit-like)일 수도 있고,\n" |
| |
| #: src/custom_types/enum.md:16 |
| msgid "// like tuple structs,\n" |
| msgstr "// 튜플 구조체 형태일 수도 있으며,\n" |
| |
| #: src/custom_types/enum.md:19 |
| msgid "// or c-like structures.\n" |
| msgstr "// 또는 C 구조체 형태일 수도 있습니다.\n" |
| |
| #: src/custom_types/enum.md:22 |
| msgid "" |
| "// A function which takes a `WebEvent` enum as an argument and\n" |
| "// returns nothing.\n" |
| msgstr "" |
| "// `WebEvent` 열거형을 인자로 받고 아무것도 반환하지 않는 함수입니다.\n" |
| |
| #: src/custom_types/enum.md:27 |
| msgid "\"page loaded\"" |
| msgstr "\"페이지 로드됨\"" |
| |
| #: src/custom_types/enum.md:28 |
| msgid "\"page unloaded\"" |
| msgstr "\"페이지 언로드됨\"" |
| |
| #: src/custom_types/enum.md:29 |
| msgid "// Destructure `c` from inside the `enum` variant.\n" |
| msgstr "// `enum` 변체 내부에서 `c`를 구조 분해합니다.\n" |
| |
| #: src/custom_types/enum.md:30 |
| msgid "\"pressed '{}'.\"" |
| msgstr "\"'{}' 키가 눌렸습니다.\"" |
| |
| #: src/custom_types/enum.md:31 |
| msgid "\"pasted \\\"{}\\\".\"" |
| msgstr "\"\\\"{}\\\"가 붙여넣기 되었습니다.\"" |
| |
| #: src/custom_types/enum.md:32 |
| msgid "// Destructure `Click` into `x` and `y`.\n" |
| msgstr "// `Click`을 `x`와 `y`로 구조 분해합니다.\n" |
| |
| #: src/custom_types/enum.md:34 |
| msgid "\"clicked at x={}, y={}.\"" |
| msgstr "\"x={}, y={} 지점이 클릭되었습니다.\"" |
| |
| #: src/custom_types/enum.md:40 |
| msgid "'x'" |
| msgstr "'x'" |
| |
| #: src/custom_types/enum.md:41 |
| msgid "// `to_owned()` creates an owned `String` from a string slice.\n" |
| msgstr "" |
| "// `to_owned()`는 문자열 슬라이스로부터 소유권이 있는 `String`을 생성합니" |
| "다.\n" |
| |
| #: src/custom_types/enum.md:42 |
| msgid "\"my text\"" |
| msgstr "\"나의 텍스트\"" |
| |
| #: src/custom_types/enum.md:56 |
| msgid "Type aliases" |
| msgstr "타입 별칭" |
| |
| #: src/custom_types/enum.md:58 |
| msgid "" |
| "If you use a type alias, you can refer to each enum variant via its alias. " |
| "This might be useful if the enum's name is too long or too generic, and you " |
| "want to rename it." |
| msgstr "" |
| "타입 별칭을 사용하면, 별칭을 통해 각 열거형 변체를 참조할 수 있습니다. 이는 " |
| "열거형의 이름이 너무 길거나 너무 일반적이어서 이름을 바꾸고 싶을 때 유용할 " |
| "수 있습니다." |
| |
| #: src/custom_types/enum.md:67 |
| msgid "// Creates a type alias\n" |
| msgstr "// 타입 별칭을 생성합니다\n" |
| |
| #: src/custom_types/enum.md:72 |
| msgid "" |
| "// We can refer to each variant via its alias, not its long and " |
| "inconvenient\n" |
| " // name.\n" |
| msgstr "// 길고 불편한 이름 대신 별칭을 통해 각 변체를 참조할 수 있습니다.\n" |
| |
| #: src/custom_types/enum.md:78 |
| msgid "" |
| "The most common place you'll see this is in `impl` blocks using the `Self` " |
| "alias." |
| msgstr "" |
| "이를 가장 흔히 볼 수 있는 곳은 `Self` 별칭을 사용하는 `impl` 블록 내부입니다." |
| |
| #: src/custom_types/enum.md:96 |
| msgid "" |
| "To learn more about enums and type aliases, you can read the [stabilization " |
| "report](https://github.com/rust-lang/rust/pull/61682/" |
| "#issuecomment-502472847) from when this feature was stabilized into Rust." |
| msgstr "" |
| "열거형과 타입 별칭에 대해 더 자세히 알아보려면, 이 기능이 Rust에서 안정화되었" |
| "을 때의 [안정화 보고서](https://github.com/rust-lang/rust/pull/61682/" |
| "#issuecomment-502472847)를 읽어보세요." |
| |
| #: src/custom_types/enum.md:102 |
| msgid "" |
| "[`match`](../flow_control/match.md), [`fn`](../fn.md), and [`String`](../std/" |
| "str.md), [\"Type alias enum variants\" RFC](https://rust-lang.github.io/rfcs/" |
| "2338-type-alias-enum-variants.html)" |
| msgstr "" |
| "[`match`](../flow_control/match.md), [`fn`](../fn.md), 그리고 [`String`](../" |
| "std/str.md), [\"타입 별칭 열거형 변체\" RFC](https://rust-lang.github.io/" |
| "rfcs/2338-type-alias-enum-variants.html)" |
| |
| #: src/custom_types/enum/enum_use.md:3 |
| msgid "" |
| "The `use` declaration can be used to avoid typing the full module path to " |
| "access a name:" |
| msgstr "" |
| "`use` 선언을 사용하면 이름을 사용하기 위해 전체 모듈 경로를 입력하는 것을 피" |
| "할 수 있습니다:" |
| |
| #: src/custom_types/enum/enum_use.md:20 |
| msgid "" |
| "// Explicitly `use` each name so they are available without\n" |
| " // manual scoping.\n" |
| msgstr "" |
| "// 각 이름을 명시적으로 `use`하여 수동으로 스코프를 지정하지 않고도\n" |
| " // 사용할 수 있게 합니다.\n" |
| |
| #: src/custom_types/enum/enum_use.md:23 |
| msgid "// Automatically `use` each name inside `Role`.\n" |
| msgstr "// `Role` 내부의 각 이름을 자동으로 `use`합니다.\n" |
| |
| #: src/custom_types/enum/enum_use.md:26 |
| msgid "// Equivalent to `Stage::Beginner`.\n" |
| msgstr "// `Stage::Beginner`와 동일합니다.\n" |
| |
| #: src/custom_types/enum/enum_use.md:28 |
| msgid "// Equivalent to `Role::Student`.\n" |
| msgstr "// `Role::Student`와 동일합니다.\n" |
| |
| #: src/custom_types/enum/enum_use.md:32 |
| msgid "// Note the lack of scoping because of the explicit `use` above.\n" |
| msgstr "// 위의 명시적 `use` 덕분에 스코프 지정이 필요 없음에 주목하세요.\n" |
| |
| #: src/custom_types/enum/enum_use.md:33 |
| msgid "\"Beginners are starting their learning journey!\"" |
| msgstr "\"초보자들이 학습 여정을 시작합니다!\"" |
| |
| #: src/custom_types/enum/enum_use.md:34 |
| msgid "\"Advanced learners are mastering their subjects...\"" |
| msgstr "\"상급 학습자들이 주제를 마스터하고 있습니다...\"" |
| |
| #: src/custom_types/enum/enum_use.md:38 |
| msgid "// Note again the lack of scoping.\n" |
| msgstr "// 다시 한번 스코프 지정이 없음에 주목하세요.\n" |
| |
| #: src/custom_types/enum/enum_use.md:39 |
| msgid "\"Students are acquiring knowledge!\"" |
| msgstr "\"학생들이 지식을 습득하고 있습니다!\"" |
| |
| #: src/custom_types/enum/enum_use.md:40 |
| msgid "\"Teachers are spreading knowledge!\"" |
| msgstr "\"교사들이 지식을 전파하고 있습니다!\"" |
| |
| #: src/custom_types/enum/enum_use.md:47 |
| msgid "[`match`](../../flow_control/match.md) and [`use`](../../mod/use.md)" |
| msgstr "[`match`](../../flow_control/match.md)와 [`use`](../../mod/use.md)" |
| |
| #: src/custom_types/enum/c_like.md:3 |
| msgid "`enum` can also be used as C-like enums." |
| msgstr "`enum`은 C 스타일의 열거형으로도 사용될 수 있습니다." |
| |
| #: src/custom_types/enum/c_like.md:8 |
| msgid "// enum with implicit discriminator (starts at 0)\n" |
| msgstr "// 암시적 식별자(0부터 시작)를 가진 열거형\n" |
| |
| #: src/custom_types/enum/c_like.md:15 |
| msgid "// enum with explicit discriminator\n" |
| msgstr "// 명시적 식별자를 가진 열거형\n" |
| |
| #: src/custom_types/enum/c_like.md:24 |
| msgid "// `enums` can be cast as integers.\n" |
| msgstr "// `enum`은 정수로 형변환(cast)될 수 있습니다.\n" |
| |
| #: src/custom_types/enum/c_like.md:25 |
| msgid "\"zero is {}\"" |
| msgstr "\"0은 {}입니다\"" |
| |
| #: src/custom_types/enum/c_like.md:26 |
| msgid "\"one is {}\"" |
| msgstr "\"1은 {}입니다\"" |
| |
| #: src/custom_types/enum/c_like.md:28 |
| msgid "\"roses are #{:06x}\"" |
| msgstr "\"장미는 #{:06x}색입니다\"" |
| |
| #: src/custom_types/enum/c_like.md:29 |
| msgid "\"violets are #{:06x}\"" |
| msgstr "\"제비꽃은 #{:06x}색입니다\"" |
| |
| #: src/custom_types/enum/c_like.md:35 |
| msgid "[casting](../../types/cast.md)" |
| msgstr "[형변환](../../types/cast.md)" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:3 |
| msgid "A common way to implement a linked-list is via `enums`:" |
| msgstr "연결 리스트를 구현하는 일반적인 방법은 `enums`를 사용하는 것입니다:" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:9 |
| msgid "" |
| "// Cons: Tuple struct that wraps an element and a pointer to the next node\n" |
| msgstr "// Cons: 요소와 다음 노드에 대한 포인터를 감싸는 튜플 구조체\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:11 |
| msgid "// Nil: A node that signifies the end of the linked list\n" |
| msgstr "// Nil: 연결 리스트의 끝을 나타내는 노드\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:14 |
| msgid "// Methods can be attached to an enum\n" |
| msgstr "// 열거형에 메서드를 붙일 수 있습니다\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:17 |
| msgid "// Create an empty list\n" |
| msgstr "// 빈 리스트를 생성합니다\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:19 |
| msgid "// `Nil` has type `List`\n" |
| msgstr "// `Nil`은 `List` 타입을 가집니다\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:23 |
| msgid "" |
| "// Consume a list, and return the same list with a new element at its front\n" |
| msgstr "" |
| "// 리스트를 소비하고, 그 앞에 새로운 요소가 추가된 동일한 리스트를 반환합니" |
| "다\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:25 |
| msgid "// `Cons` also has type List\n" |
| msgstr "// `Cons` 역시 `List` 타입을 가집니다\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:29 |
| msgid "// Return the length of the list\n" |
| msgstr "// 리스트의 길이를 반환합니다\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:31 |
| msgid "" |
| "// `self` has to be matched, because the behavior of this method\n" |
| " // depends on the variant of `self`\n" |
| " // `self` has type `&List`, and `*self` has type `List`, matching on " |
| "a\n" |
| " // concrete type `T` is preferred over a match on a reference `&T`\n" |
| " // after Rust 2018 you can use self here and tail (with no ref) " |
| "below as well,\n" |
| " // rust will infer &s and ref tail.\n" |
| " // See https://doc.rust-lang.org/edition-guide/rust-2018/ownership-" |
| "and-lifetimes/default-match-bindings.html\n" |
| msgstr "" |
| "// 메서드의 동작이 `self`의 변체에 따라 달라지므로 `self`에 대해 매치(match)" |
| "를 수행해야 합니다.\n" |
| " // `self`는 `&List` 타입이고, `*self`는 `List` 타입입니다. 구체적인 " |
| "타입 `T`에 대한 매칭이\n" |
| " // 참조 `&T`에 대한 매칭보다 선호됩니다.\n" |
| " // Rust 2018 이후에는 여기서 self를 사용하고 아래에서 tail(ref 없이)" |
| "을 사용할 수도 있습니다.\n" |
| " // Rust가 &s와 ref tail을 추론할 것입니다.\n" |
| " // 참고: https://doc.rust-lang.org/edition-guide/rust-2018/ownership-" |
| "and-lifetimes/default-match-bindings.html\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:39 |
| msgid "" |
| "// Can't take ownership of the tail, because `self` is borrowed;\n" |
| " // instead take a reference to the tail\n" |
| " // And it's a non-tail recursive call which may cause stack " |
| "overflow for long lists.\n" |
| msgstr "" |
| "// `self`가 빌려온 상태이므로 꼬리(tail)의 소유권을 가질 수 없습니다.\n" |
| " // 대신 꼬리에 대한 참조를 가져옵니다.\n" |
| " // 그리고 이것은 꼬리 재귀가 아닌 호출이므로 긴 리스트의 경우 스" |
| "택 오버플로우가 발생할 수 있습니다.\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:43 |
| msgid "// Base Case: An empty list has zero length\n" |
| msgstr "// 기저 사례(Base Case): 빈 리스트의 길이는 0입니다\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:48 |
| msgid "// Return representation of the list as a (heap allocated) string\n" |
| msgstr "// 리스트를 (힙에 할당된) 문자열 표현으로 반환합니다\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:52 |
| msgid "" |
| "// `format!` is similar to `print!`, but returns a heap\n" |
| " // allocated string instead of printing to the console\n" |
| msgstr "" |
| "// `format!`은 `print!`와 유사하지만, 콘솔에 출력하는 대신\n" |
| " // 힙에 할당된 문자열을 반환합니다\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:54 src/generics/impl.md:44 |
| msgid "\"{}, {}\"" |
| msgstr "\"{}, {}\"" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:57 |
| msgid "\"Nil\"" |
| msgstr "\"Nil\"" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:64 |
| msgid "// Create an empty linked list\n" |
| msgstr "// 빈 연결 리스트를 생성합니다\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:67 |
| msgid "// Prepend some elements\n" |
| msgstr "// 몇 가지 요소를 앞에 추가합니다\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:72 |
| msgid "// Show the final state of the list\n" |
| msgstr "// 리스트의 최종 상태를 보여줍니다\n" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:73 |
| msgid "\"linked list has length: {}\"" |
| msgstr "\"연결 리스트의 길이는 {}입니다\"" |
| |
| #: src/custom_types/enum/testcase_linked_list.md:80 |
| msgid "[`Box`](../../std/box.md) and [methods](../../fn/methods.md)" |
| msgstr "[`Box`](../../std/box.md)와 [메서드](../../fn/methods.md)" |
| |
| #: src/custom_types/constants.md:3 |
| msgid "" |
| "Rust has two different types of constants which can be declared in any scope " |
| "including global. Both require explicit type annotation:" |
| msgstr "" |
| "Rust에는 전역 범위를 포함한 모든 범위에서 선언할 수 있는 두 가지 유형의 상수" |
| "가 있습니다. 둘 다 명시적인 타입 어노테이션이 필요합니다:" |
| |
| #: src/custom_types/constants.md:6 |
| msgid "`const`: An unchangeable value (the common case)." |
| msgstr "`const`: 변경할 수 없는 값 (일반적인 경우)." |
| |
| #: src/custom_types/constants.md:7 |
| msgid "" |
| "`static`: A possibly mutable variable with [`'static`](../scope/lifetime/" |
| "static_lifetime.md) lifetime. The static lifetime is inferred and does not " |
| "have to be specified. Accessing or modifying a mutable static variable is " |
| "[`unsafe`](../unsafe.md)." |
| msgstr "" |
| "`static`: [`'static`](../scope/lifetime/static_lifetime.md) 라이프타임을 가" |
| "진, 가변적일 수 있는 변수입니다. static 라이프타임은 추론되므로 명시할 필요" |
| "는 없습니다. 가변적인 static 변수에 접근하거나 수정하는 것은 [`unsafe`](../" |
| "unsafe.md)합니다." |
| |
| #: src/custom_types/constants.md:12 |
| msgid "// Globals are declared outside all other scopes.\n" |
| msgstr "// 전역 변수는 다른 모든 범위의 바깥에 선언됩니다.\n" |
| |
| #: src/custom_types/constants.md:13 |
| msgid "\"Rust\"" |
| msgstr "\"러스트\"" |
| |
| #: src/custom_types/constants.md:17 |
| msgid "// Access constant in some function\n" |
| msgstr "// 어떤 함수 내에서 상수에 접근\n" |
| |
| #: src/custom_types/constants.md:24 |
| msgid "// Access constant in the main thread\n" |
| msgstr "// 메인 스레드에서 상수에 접근\n" |
| |
| #: src/custom_types/constants.md:25 |
| msgid "\"This is {}\"" |
| msgstr "\"이것은 {}입니다\"" |
| |
| #: src/custom_types/constants.md:26 |
| msgid "\"The threshold is {}\"" |
| msgstr "\"임계값은 {}입니다\"" |
| |
| #: src/custom_types/constants.md:27 |
| msgid "\"{} is {}\"" |
| msgstr "\"{}은(는) {}입니다\"" |
| |
| #: src/custom_types/constants.md:27 |
| msgid "\"big\"" |
| msgstr "\"큰\"" |
| |
| #: src/custom_types/constants.md:27 |
| msgid "\"small\"" |
| msgstr "\"작은\"" |
| |
| #: src/custom_types/constants.md:29 |
| msgid "// Error! Cannot modify a `const`.\n" |
| msgstr "// 에러! `const`는 수정할 수 없습니다.\n" |
| |
| #: src/custom_types/constants.md:31 src/variable_bindings/scope.md:22 |
| #: src/variable_bindings/declare.md:27 src/variable_bindings/freeze.md:16 |
| #: src/types/cast.md:19 src/types/cast.md:28 src/flow_control/for.md:95 |
| #: src/scope/borrow.md:41 src/scope/borrow/mut.md:52 src/std/vec.md:32 |
| #: src/std/vec.md:45 src/std/hash/hashset.md:48 |
| msgid "// FIXME ^ Comment out this line\n" |
| msgstr "// FIXME ^ 이 줄을 주석 처리하세요\n" |
| |
| #: src/custom_types/constants.md:37 |
| msgid "" |
| "[The `const`/`static` RFC](https://github.com/rust-lang/rfcs/blob/master/" |
| "text/0246-const-vs-static.md), [`'static` lifetime](../scope/lifetime/" |
| "static_lifetime.md)" |
| msgstr "" |
| "[`const`/`static` RFC](https://github.com/rust-lang/rfcs/blob/master/text/" |
| "0246-const-vs-static.md), [`'static` 라이프타임](../scope/lifetime/" |
| "static_lifetime.md)" |
| |
| #: src/variable_bindings.md:3 |
| msgid "" |
| "Rust provides type safety via static typing. Variable bindings can be type " |
| "annotated when declared. However, in most cases, the compiler will be able " |
| "to infer the type of the variable from the context, heavily reducing the " |
| "annotation burden." |
| msgstr "" |
| "Rust는 정적 타이핑을 통해 타입 안전성을 제공합니다. 변수 바인딩은 선언 시 타" |
| "입 어노테이션을 할 수 있습니다. 하지만 대부분의 경우, 컴파일러는 문맥으로부" |
| "터 변수의 타입을 추론할 수 있어 어노테이션의 부담을 크게 줄여줍니다." |
| |
| #: src/variable_bindings.md:8 |
| msgid "" |
| "Values (like literals) can be bound to variables, using the `let` binding." |
| msgstr "값(리터럴 등)은 `let` 바인딩을 사용하여 변수에 바인딩될 수 있습니다." |
| |
| #: src/variable_bindings.md:16 |
| msgid "// copy `an_integer` into `copied_integer`\n" |
| msgstr "// `an_integer`를 `copied_integer`로 복사합니다\n" |
| |
| #: src/variable_bindings.md:19 |
| msgid "\"An integer: {:?}\"" |
| msgstr "\"정수: {:?}\"" |
| |
| #: src/variable_bindings.md:20 |
| msgid "\"A boolean: {:?}\"" |
| msgstr "\"불리언: {:?}\"" |
| |
| #: src/variable_bindings.md:21 |
| msgid "\"Meet the unit value: {:?}\"" |
| msgstr "\"유닛 값을 만나보세요: {:?}\"" |
| |
| #: src/variable_bindings.md:23 |
| msgid "" |
| "// The compiler warns about unused variable bindings; these warnings can\n" |
| " // be silenced by prefixing the variable name with an underscore\n" |
| msgstr "" |
| "// 컴파일러는 사용되지 않는 변수 바인딩에 대해 경고를 보냅니다. 이러한 경고" |
| "는\n" |
| " // 변수 이름 앞에 밑줄을 붙여서 비활성화할 수 있습니다.\n" |
| |
| #: src/variable_bindings.md:28 |
| msgid "" |
| "// FIXME ^ Prefix with an underscore to suppress the warning\n" |
| " // Please note that warnings may not be shown in a browser\n" |
| msgstr "" |
| "// FIXME ^ 경고를 억제하기 위해 밑줄을 접두사로 붙이세요\n" |
| " // 브라우저에서는 경고가 표시되지 않을 수 있음에 유의하세요\n" |
| |
| #: src/variable_bindings/mut.md:3 |
| msgid "" |
| "Variable bindings are immutable by default, but this can be overridden using " |
| "the `mut` modifier." |
| msgstr "" |
| "변수 바인딩은 기본적으로 불변(immutable)이지만, `mut` 수식어를 사용하여 이를 " |
| "재정의할 수 있습니다." |
| |
| #: src/variable_bindings/mut.md:11 |
| msgid "\"Before mutation: {}\"" |
| msgstr "\"변경 전: {}\"" |
| |
| #: src/variable_bindings/mut.md:13 |
| msgid "// Ok\n" |
| msgstr "// 좋습니다\n" |
| |
| #: src/variable_bindings/mut.md:16 |
| msgid "\"After mutation: {}\"" |
| msgstr "\"변경 후: {}\"" |
| |
| #: src/variable_bindings/mut.md:18 |
| msgid "// Error! Cannot assign a new value to an immutable variable\n" |
| msgstr "// 에러! 불변 변수에는 새로운 값을 할당할 수 없습니다\n" |
| |
| #: src/variable_bindings/mut.md:23 |
| msgid "The compiler will throw a detailed diagnostic about mutability errors." |
| msgstr "컴파일러는 가변성 에러에 대해 상세한 진단을 제공할 것입니다." |
| |
| #: src/variable_bindings/scope.md:3 |
| msgid "" |
| "Variable bindings have a scope, and are constrained to live in a _block_. A " |
| "block is a collection of statements enclosed by braces `{}`." |
| msgstr "" |
| "변수 바인딩은 스코프(범위)를 가지며, _블록_ 내에 거주하도록 제한됩니다. 블록" |
| "은 중괄호 `{}`로 둘러싸인 문장들의 모음입니다." |
| |
| #: src/variable_bindings/scope.md:8 |
| msgid "// This binding lives in the main function\n" |
| msgstr "// 이 바인딩은 메인 함수에 거주합니다\n" |
| |
| #: src/variable_bindings/scope.md:11 |
| msgid "// This is a block, and has a smaller scope than the main function\n" |
| msgstr "// 이것은 블록이며, 메인 함수보다 더 작은 스코프를 가집니다\n" |
| |
| #: src/variable_bindings/scope.md:13 |
| msgid "// This binding only exists in this block\n" |
| msgstr "// 이 바인딩은 이 블록 내에만 존재합니다\n" |
| |
| #: src/variable_bindings/scope.md:16 |
| msgid "\"inner short: {}\"" |
| msgstr "\"내부 short: {}\"" |
| |
| #: src/variable_bindings/scope.md:18 |
| msgid "// End of the block\n" |
| msgstr "// 블록의 끝\n" |
| |
| #: src/variable_bindings/scope.md:20 |
| msgid "// Error! `short_lived_binding` doesn't exist in this scope\n" |
| msgstr "// 에러! `short_lived_binding`은 이 스코프에 존재하지 않습니다\n" |
| |
| #: src/variable_bindings/scope.md:21 |
| msgid "\"outer short: {}\"" |
| msgstr "\"외부 short: {}\"" |
| |
| #: src/variable_bindings/scope.md:24 |
| msgid "\"outer long: {}\"" |
| msgstr "\"외부 long: {}\"" |
| |
| #: src/variable_bindings/scope.md:28 |
| msgid "" |
| "Also, [variable shadowing](https://en.wikipedia.org/wiki/Variable_shadowing) " |
| "is allowed." |
| msgstr "" |
| "또한, [변수 섀도잉](https://en.wikipedia.org/wiki/Variable_shadowing)이 허용" |
| "됩니다." |
| |
| #: src/variable_bindings/scope.md:35 |
| msgid "\"before being shadowed: {}\"" |
| msgstr "\"섀도잉 전: {}\"" |
| |
| #: src/variable_bindings/scope.md:37 |
| msgid "// This binding *shadows* the outer one\n" |
| msgstr "// 이 바인딩은 외부 바인딩을 *섀도잉*합니다\n" |
| |
| #: src/variable_bindings/scope.md:38 |
| msgid "\"abc\"" |
| msgstr "\"abc\"" |
| |
| #: src/variable_bindings/scope.md:40 |
| msgid "\"shadowed in inner block: {}\"" |
| msgstr "\"내부 블록에서 섀도잉됨: {}\"" |
| |
| #: src/variable_bindings/scope.md:42 |
| msgid "\"outside inner block: {}\"" |
| msgstr "\"내부 블록 밖: {}\"" |
| |
| #: src/variable_bindings/scope.md:44 |
| msgid "// This binding *shadows* the previous binding\n" |
| msgstr "// 이 바인딩은 이전 바인딩을 *섀도잉*합니다\n" |
| |
| #: src/variable_bindings/scope.md:46 |
| msgid "\"shadowed in outer block: {}\"" |
| msgstr "\"외부 블록에서 섀도잉됨: {}\"" |
| |
| #: src/variable_bindings/declare.md:3 |
| msgid "" |
| "It is possible to declare variable bindings first and initialize them later, " |
| "but all variable bindings must be initialized before they are used: the " |
| "compiler forbids use of uninitialized variable bindings, as it would lead to " |
| "undefined behavior." |
| msgstr "" |
| "변수 바인딩을 먼저 선언하고 나중에 초기화하는 것이 가능하지만, 모든 변수 바인" |
| "딩은 사용되기 전에 초기화되어야 합니다. 컴파일러는 정의되지 않은 동작을 초래" |
| "할 수 있는 초기화되지 않은 변수 바인딩의 사용을 금지합니다." |
| |
| #: src/variable_bindings/declare.md:5 |
| msgid "" |
| "It is not common to declare a variable binding and initialize it later in " |
| "the function. It is more difficult for a reader to find the initialization " |
| "when initialization is separated from declaration. It is common to declare " |
| "and initialize a variable binding near where the variable will be used." |
| msgstr "" |
| "변수 바인딩을 선언하고 나중에 함수 내에서 초기화하는 것은 일반적이지 않습니" |
| "다. 선언과 초기화가 분리되어 있으면 독자가 초기화 지점을 찾기 더 어렵기 때문" |
| "입니다. 변수가 사용될 위치 근처에서 선언과 초기화를 함께 하는 것이 일반적입니" |
| "다." |
| |
| #: src/variable_bindings/declare.md:11 |
| msgid "// Declare a variable binding\n" |
| msgstr "// 변수 바인딩 선언\n" |
| |
| #: src/variable_bindings/declare.md:17 |
| msgid "// Initialize the binding\n" |
| msgstr "// 바인딩 초기화\n" |
| |
| #: src/variable_bindings/declare.md:21 |
| msgid "\"a binding: {}\"" |
| msgstr "\"바인딩 a: {}\"" |
| |
| #: src/variable_bindings/declare.md:25 |
| msgid "// Error! Use of uninitialized binding\n" |
| msgstr "// 에러! 초기화되지 않은 바인딩 사용\n" |
| |
| #: src/variable_bindings/declare.md:26 src/variable_bindings/declare.md:31 |
| msgid "\"another binding: {}\"" |
| msgstr "\"또 다른 바인딩: {}\"" |
| |
| #: src/variable_bindings/freeze.md:3 |
| msgid "" |
| "When data is bound by the same name immutably, it also _freezes_. _Frozen_ " |
| "data can't be modified until the immutable binding goes out of scope:" |
| msgstr "" |
| "데이터가 동일한 이름으로 불변하게 바인딩되면, 해당 데이터는 _동결(freeze)_됩" |
| "니다. _동결된_ 데이터는 불변 바인딩이 스코프를 벗어날 때까지 수정할 수 없습니" |
| "다." |
| |
| #: src/variable_bindings/freeze.md:11 |
| msgid "// Shadowing by immutable `_mutable_integer`\n" |
| msgstr "// 불변 `_mutable_integer`에 의한 섀도잉\n" |
| |
| #: src/variable_bindings/freeze.md:14 |
| msgid "// Error! `_mutable_integer` is frozen in this scope\n" |
| msgstr "// 에러! `_mutable_integer`는 이 스코프에서 동결되었습니다\n" |
| |
| #: src/variable_bindings/freeze.md:18 |
| msgid "// `_mutable_integer` goes out of scope\n" |
| msgstr "// `_mutable_integer`가 스코프를 벗어납니다\n" |
| |
| #: src/variable_bindings/freeze.md:21 |
| msgid "// Ok! `_mutable_integer` is not frozen in this scope\n" |
| msgstr "// 좋습니다! `_mutable_integer`는 이 스코프에서 동결되지 않았습니다\n" |
| |
| #: src/types.md:3 |
| msgid "" |
| "Rust provides several mechanisms to change or define the type of primitive " |
| "and user defined types. The following sections cover:" |
| msgstr "" |
| "Rust는 기본 타입과 사용자 정의 타입의 타입을 변경하거나 정의하기 위한 여러 메" |
| "커니즘을 제공합니다. 다음 섹션에서는 다음을 다룹니다:" |
| |
| #: src/types.md:6 |
| msgid "[Casting](types/cast.md) between primitive types" |
| msgstr "기본 타입 간의 [형변환(Casting)](types/cast.md)" |
| |
| #: src/types.md:7 |
| msgid "Specifying the desired type of [literals](types/literals.md)" |
| msgstr "[리터럴](types/literals.md)의 원하는 타입을 지정하는 법" |
| |
| #: src/types.md:8 |
| msgid "Using [type inference](types/inference.md)" |
| msgstr "[타입 추론(type inference)](types/inference.md) 사용" |
| |
| #: src/types.md:9 |
| msgid "[Aliasing](types/alias.md) types" |
| msgstr "타입 [별칭(Aliasing)](types/alias.md)" |
| |
| #: src/types/cast.md:3 |
| msgid "" |
| "Rust provides no implicit type conversion (coercion) between primitive " |
| "types. But, explicit type conversion (casting) can be performed using the " |
| "`as` keyword." |
| msgstr "" |
| "Rust는 기본 타입 간의 암시적 타입 변환(강제)을 제공하지 않습니다. 하지만 " |
| "`as` 키워드를 사용하여 명시적 타입 변환(캐스팅)을 수행할 수 있습니다." |
| |
| #: src/types/cast.md:6 |
| msgid "" |
| "Rules for converting between integral types follow C conventions generally, " |
| "except in cases where C has undefined behavior. The behavior of all casts " |
| "between integral types is well defined in Rust." |
| msgstr "" |
| "정수 타입 간의 변환 규칙은 일반적으로 C 언어의 관례를 따르지만, C에서 정의되" |
| "지 않은 동작(undefined behavior)이 발생하는 경우는 예외입니다. Rust에서 정수 " |
| "타입 간의 모든 캐스팅 동작은 잘 정의되어 있습니다." |
| |
| #: src/types/cast.md:11 |
| msgid "// Suppress all errors from casts which overflow.\n" |
| msgstr "// 오버플로우가 발생하는 캐스팅으로 인한 모든 에러를 억제합니다.\n" |
| |
| #: src/types/cast.md:17 |
| msgid "// Error! No implicit conversion\n" |
| msgstr "// 에러! 암시적 변환 없음\n" |
| |
| #: src/types/cast.md:21 |
| msgid "// Explicit conversion\n" |
| msgstr "// 명시적 변환\n" |
| |
| #: src/types/cast.md:25 |
| msgid "" |
| "// Error! There are limitations in conversion rules.\n" |
| " // A float cannot be directly converted to a char.\n" |
| msgstr "" |
| "// 에러! 변환 규칙에 제한이 있습니다.\n" |
| " // 부동 소수점은 문자로 직접 변환할 수 없습니다.\n" |
| |
| #: src/types/cast.md:30 |
| msgid "\"Casting: {} -> {} -> {}\"" |
| msgstr "\"형변환: {} -> {} -> {}\"" |
| |
| #: src/types/cast.md:32 |
| msgid "" |
| "// when casting any value to an unsigned type, T,\n" |
| " // T::MAX + 1 is added or subtracted until the value\n" |
| " // fits into the new type ONLY when the #![allow(overflowing_literals)]\n" |
| " // lint is specified like above. Otherwise there will be a compiler " |
| "error.\n" |
| msgstr "" |
| "// 값을 부호 없는 타입 T로 캐스팅할 때, #![allow(overflowing_literals)]\n" |
| " // 린트가 위와 같이 지정된 경우에만 값이 새로운 타입에 맞을 때까지\n" |
| " // T::MAX + 1을 더하거나 뺍니다. 그렇지 않으면 컴파일 에러가 발생합니" |
| "다.\n" |
| |
| #: src/types/cast.md:37 |
| msgid "// 1000 already fits in a u16\n" |
| msgstr "// 1000은 이미 u16에 들어맞습니다\n" |
| |
| #: src/types/cast.md:38 |
| msgid "\"1000 as a u16 is: {}\"" |
| msgstr "\"1000을 u16으로 변환하면: {}\"" |
| |
| #: src/types/cast.md:40 |
| msgid "" |
| "// 1000 - 256 - 256 - 256 = 232\n" |
| " // Under the hood, the first 8 least significant bits (LSB) are kept,\n" |
| " // while the rest towards the most significant bit (MSB) get truncated.\n" |
| msgstr "" |
| "// 1000 - 256 - 256 - 256 = 232\n" |
| " // 내부적으로는 첫 8개의 최하위 비트(LSB)는 유지되고,\n" |
| " // 최상위 비트(MSB) 쪽의 나머지 비트들은 잘려 나갑니다.\n" |
| |
| #: src/types/cast.md:43 src/types/cast.md:62 |
| msgid "\"1000 as a u8 is : {}\"" |
| msgstr "\"1000을 u8로 변환하면 : {}\"" |
| |
| #: src/types/cast.md:44 |
| msgid "// -1 + 256 = 255\n" |
| msgstr "// -1 + 256 = 255\n" |
| |
| #: src/types/cast.md:45 |
| msgid "\" -1 as a u8 is : {}\"" |
| msgstr "\" -1을 u8로 변환하면 : {}\"" |
| |
| #: src/types/cast.md:47 |
| msgid "// For positive numbers, this is the same as the modulus\n" |
| msgstr "// 양수의 경우, 이는 나머지 연산(modulus)과 동일합니다\n" |
| |
| #: src/types/cast.md:48 |
| msgid "\"1000 mod 256 is : {}\"" |
| msgstr "\"1000 mod 256은 : {}\"" |
| |
| #: src/types/cast.md:50 |
| msgid "" |
| "// When casting to a signed type, the (bitwise) result is the same as\n" |
| " // first casting to the corresponding unsigned type. If the most " |
| "significant\n" |
| " // bit of that value is 1, then the value is negative.\n" |
| msgstr "" |
| "// 부호 있는 타입으로 캐스팅할 때, (비트 단위) 결과는 먼저\n" |
| " // 대응하는 부호 없는 타입으로 캐스팅하는 것과 같습니다. 만약 그 값의\n" |
| " // 최상위 비트가 1이면, 그 값은 음수입니다.\n" |
| |
| #: src/types/cast.md:54 |
| msgid "// Unless it already fits, of course.\n" |
| msgstr "// 물론 이미 들어맞는 경우는 제외합니다.\n" |
| |
| #: src/types/cast.md:55 |
| msgid "\" 128 as a i16 is: {}\"" |
| msgstr "\" 128을 i16으로 변환하면: {}\"" |
| |
| #: src/types/cast.md:57 |
| msgid "" |
| "// In boundary case 128 value in 8-bit two's complement representation is " |
| "-128\n" |
| msgstr "" |
| "// 경계 케이스의 경우, 8비트 2의 보수 표현에서 128이라는 값은 -128입니다.\n" |
| |
| #: src/types/cast.md:58 |
| msgid "\" 128 as a i8 is : {}\"" |
| msgstr "\" 128을 i8로 변환하면 : {}\"" |
| |
| #: src/types/cast.md:60 |
| msgid "" |
| "// repeating the example above\n" |
| " // 1000 as u8 -> 232\n" |
| msgstr "" |
| "// 위 예제를 반복합니다\n" |
| " // 1000을 u8로 변환 -> 232\n" |
| |
| #: src/types/cast.md:63 |
| msgid "" |
| "// and the value of 232 in 8-bit two's complement representation is -24\n" |
| msgstr "// 그리고 8비트 2의 보수 표현에서 232라는 값은 -24입니다.\n" |
| |
| #: src/types/cast.md:64 |
| msgid "\" 232 as a i8 is : {}\"" |
| msgstr "\" 232를 i8로 변환하면 : {}\"" |
| |
| #: src/types/cast.md:66 |
| msgid "" |
| "// Since Rust 1.45, the `as` keyword performs a *saturating cast*\n" |
| " // when casting from float to int. If the floating point value exceeds\n" |
| " // the upper bound or is less than the lower bound, the returned value\n" |
| " // will be equal to the bound crossed.\n" |
| msgstr "" |
| "// Rust 1.45부터, 부동 소수점을 정수로 캐스팅할 때 `as` 키워드는\n" |
| " // *포화 캐스팅(saturating cast)*을 수행합니다. 부동 소수점 값이\n" |
| " // 상한을 초과하거나 하한보다 작으면, 반환되는 값은 해당 경계값이 됩니" |
| "다.\n" |
| |
| #: src/types/cast.md:71 |
| msgid "// 300.0 as u8 is 255\n" |
| msgstr "// 300.0을 u8로 변환하면 255입니다\n" |
| |
| #: src/types/cast.md:72 src/types/cast.md:83 |
| msgid "\" 300.0 as u8 is : {}\"" |
| msgstr "\" 300.0을 u8로 변환하면 : {}\"" |
| |
| #: src/types/cast.md:73 |
| msgid "// -100.0 as u8 is 0\n" |
| msgstr "// -100.0을 u8로 변환하면 0입니다\n" |
| |
| #: src/types/cast.md:74 src/types/cast.md:85 |
| msgid "\"-100.0 as u8 is : {}\"" |
| msgstr "\"-100.0을 u8로 변환하면 : {}\"" |
| |
| #: src/types/cast.md:75 src/types/cast.md:86 |
| msgid "// nan as u8 is 0\n" |
| msgstr "// nan을 u8로 변환하면 0입니다\n" |
| |
| #: src/types/cast.md:76 src/types/cast.md:87 |
| msgid "\" nan as u8 is : {}\"" |
| msgstr "\" nan을 u8로 변환하면 : {}\"" |
| |
| #: src/types/cast.md:78 |
| msgid "" |
| "// This behavior incurs a small runtime cost and can be avoided\n" |
| " // with unsafe methods, however the results might overflow and\n" |
| " // return **unsound values**. Use these methods wisely:\n" |
| msgstr "" |
| "// 이러한 동작은 약간의 런타임 비용을 발생시키며, unsafe 메서드를 사용하여\n" |
| " // 피할 수 있습니다. 하지만 결과가 오버플로우되어 **불건전한 값(unsound " |
| "values)**을\n" |
| " // 반환할 수 있습니다. 이러한 메서드들은 현명하게 사용하세요:\n" |
| |
| #: src/types/cast.md:82 |
| msgid "// 300.0 as u8 is 44\n" |
| msgstr "// 300.0을 u8로 변환하면 44입니다\n" |
| |
| #: src/types/cast.md:84 |
| msgid "// -100.0 as u8 is 156\n" |
| msgstr "// -100.0을 u8로 변환하면 156입니다\n" |
| |
| #: src/types/literals.md:3 |
| msgid "" |
| "Numeric literals can be type annotated by adding the type as a suffix. As an " |
| "example, to specify that the literal `42` should have the type `i32`, write " |
| "`42i32`." |
| msgstr "" |
| "숫자 리터럴은 타입 이름을 접미사로 추가하여 타입 어노테이션을 할 수 있습니" |
| "다. 예를 들어, 리터럴 `42`가 `i32` 타입을 가져야 함을 지정하려면 `42i32`라고 " |
| "씁니다." |
| |
| #: src/types/literals.md:6 |
| msgid "" |
| "The type of unsuffixed numeric literals will depend on how they are used. If " |
| "no constraint exists, the compiler will use `i32` for integers, and `f64` " |
| "for floating-point numbers." |
| msgstr "" |
| "접미사가 없는 숫자 리터럴의 타입은 어떻게 사용되느냐에 따라 달라집니다. 아무" |
| "런 제약이 없다면 컴파일러는 정수에 대해서는 `i32`를, 부동 소수점 숫자에 대해" |
| "서는 `f64`를 사용합니다." |
| |
| #: src/types/literals.md:12 |
| msgid "// Suffixed literals, their types are known at initialization\n" |
| msgstr "// 접미사가 붙은 리터럴은 초기화 시 그 타입을 알 수 있습니다.\n" |
| |
| #: src/types/literals.md:17 |
| msgid "// Unsuffixed literals, their types depend on how they are used\n" |
| msgstr "" |
| "// 접미사가 없는 리터럴의 타입은 어떻게 사용되느냐에 따라 달라집니다.\n" |
| |
| #: src/types/literals.md:21 |
| msgid "// `size_of_val` returns the size of a variable in bytes\n" |
| msgstr "// `size_of_val`은 변수의 크기를 바이트 단위로 반환합니다.\n" |
| |
| #: src/types/literals.md:22 |
| msgid "\"size of `x` in bytes: {}\"" |
| msgstr "`x`의 바이트 크기: {}" |
| |
| #: src/types/literals.md:23 |
| msgid "\"size of `y` in bytes: {}\"" |
| msgstr "`y`의 바이트 크기: {}" |
| |
| #: src/types/literals.md:24 |
| msgid "\"size of `z` in bytes: {}\"" |
| msgstr "`z`의 바이트 크기: {}" |
| |
| #: src/types/literals.md:25 |
| msgid "\"size of `i` in bytes: {}\"" |
| msgstr "`i`의 바이트 크기: {}" |
| |
| #: src/types/literals.md:26 |
| msgid "\"size of `f` in bytes: {}\"" |
| msgstr "`f`의 바이트 크기: {}" |
| |
| #: src/types/literals.md:30 |
| msgid "" |
| "There are some concepts used in the previous code that haven't been " |
| "explained yet, here's a brief explanation for the impatient readers:" |
| msgstr "" |
| "앞선 코드에서 아직 설명되지 않은 몇 가지 개념이 사용되었습니다. 성급한 독자들" |
| "을 위한 간단한 설명은 다음과 같습니다:" |
| |
| #: src/types/literals.md:33 |
| msgid "" |
| "`std::mem::size_of_val` is a function, but called with its _full path_. Code " |
| "can be split in logical units called _modules_. In this case, the " |
| "`size_of_val` function is defined in the `mem` module, and the `mem` module " |
| "is defined in the `std` _crate_. For more details, see [modules](../mod.md) " |
| "and [crates](../crates.md)." |
| msgstr "" |
| "`std::mem::size_of_val`은 함수이지만, _전체 경로(full path)_를 사용하여 호출" |
| "되었습니다. 코드는 _모듈_이라고 불리는 논리적 단위로 나뉠 수 있습니다. 이 경" |
| "우, `size_of_val` 함수는 `mem` 모듈에 정의되어 있고, `mem` 모듈은 `std` _크레" |
| "이트_에 정의되어 있습니다. 자세한 내용은 [모듈](../mod.md) 및 [크레이트](../" |
| "crates.md)를 참조하세요." |
| |
| #: src/types/inference.md:3 |
| msgid "" |
| "The type inference engine is pretty smart. It does more than looking at the " |
| "type of the value expression during an initialization. It also looks at how " |
| "the variable is used afterwards to infer its type. Here's an advanced " |
| "example of type inference:" |
| msgstr "" |
| "타입 추론 엔진은 꽤 똑똑합니다. 초기화 중에 값 표현식의 타입을 살펴보는 것 이" |
| "상의 일을 합니다. 또한 변수가 이후에 어떻게 사용되는지를 보고 타입을 추론합니" |
| "다. 다음은 타입 추론의 심화 예시입니다:" |
| |
| #: src/types/inference.md:10 |
| msgid "" |
| "// Because of the annotation, the compiler knows that `elem` has type u8.\n" |
| msgstr "// 어노테이션 덕분에 컴파일러는 `elem`이 u8 타입임을 압니다.\n" |
| |
| #: src/types/inference.md:13 |
| msgid "// Create an empty vector (a growable array).\n" |
| msgstr "// 빈 벡터(가변 크기 배열)를 생성합니다.\n" |
| |
| #: src/types/inference.md:15 |
| msgid "" |
| "// At this point the compiler doesn't know the exact type of `vec`, it\n" |
| " // just knows that it's a vector of something (`Vec<_>`).\n" |
| msgstr "" |
| "// 이 시점에서 컴파일러는 `vec`의 정확한 타입을 알지 못하며,\n" |
| " // 단지 무언가의 벡터(`Vec<_>`)라는 것만 압니다.\n" |
| |
| #: src/types/inference.md:18 |
| msgid "// Insert `elem` in the vector.\n" |
| msgstr "// 벡터에 `elem`을 삽입합니다.\n" |
| |
| #: src/types/inference.md:20 |
| msgid "" |
| "// Aha! Now the compiler knows that `vec` is a vector of `u8`s (`Vec<u8>`)\n" |
| " // TODO ^ Try commenting out the `vec.push(elem)` line\n" |
| msgstr "" |
| "// 아하! 이제 컴파일러는 `vec`이 `u8`들의 벡터(`Vec<u8>`)임을 압니다.\n" |
| " // TODO ^ `vec.push(elem)` 줄을 주석 처리해 보세요\n" |
| |
| #: src/types/inference.md:27 |
| msgid "" |
| "No type annotation of variables was needed, the compiler is happy and so is " |
| "the programmer!" |
| msgstr "" |
| "변수의 타입 어노테이션이 필요하지 않았습니다. 컴파일러도 만족하고 프로그래머" |
| "도 행복합니다!" |
| |
| #: src/types/alias.md:3 |
| msgid "" |
| "The `type` statement can be used to give a new name to an existing type. " |
| "Types must have `UpperCamelCase` names, or the compiler will raise a " |
| "warning. The exception to this rule are the primitive types: `usize`, `f32`, " |
| "etc." |
| msgstr "" |
| "`type` 문을 사용하면 기존 타입에 새로운 이름을 부여할 수 있습니다. 타입 이름" |
| "은 `UpperCamelCase`여야 하며, 그렇지 않으면 컴파일러가 경고를 보냅니다. 이 규" |
| "칙의 예외는 기본 타입인 `usize`, `f32` 등입니다." |
| |
| #: src/types/alias.md:8 |
| msgid "// `NanoSecond`, `Inch`, and `U64` are new names for `u64`.\n" |
| msgstr "// `NanoSecond`, `Inch`, `U64`는 `u64`를 가리키는 새로운 이름입니다.\n" |
| |
| #: src/types/alias.md:14 |
| msgid "// `NanoSecond` = `Inch` = `U64` = `u64`.\n" |
| msgstr "// `NanoSecond` = `Inch` = `U64` = `u64`입니다.\n" |
| |
| #: src/types/alias.md:18 |
| msgid "" |
| "// Note that type aliases *don't* provide any extra type safety, because\n" |
| " // aliases are *not* new types\n" |
| msgstr "" |
| "// 타입 별칭은 새로운 타입이 아니기 때문에, 추가적인 타입 안전성을\n" |
| " // 제공하지 않는다는 점에 유의하세요.\n" |
| |
| #: src/types/alias.md:20 |
| msgid "\"{} nanoseconds + {} inches = {} unit?\"" |
| msgstr "\"{} 나노초 + {} 인치 = {} 유닛?\"" |
| |
| #: src/types/alias.md:27 |
| msgid "" |
| "The main use of aliases is to reduce boilerplate; for example the " |
| "`io::Result<T>` type is an alias for the `Result<T, io::Error>` type." |
| msgstr "" |
| "별칭의 주요 용도는 보일러플레이트(boilerplate)를 줄이는 것입니다. 예를 들어 " |
| "`io::Result<T>` 타입은 `Result<T, io::Error>` 타입의 별칭입니다." |
| |
| #: src/types/alias.md:32 |
| msgid "[Attributes](../attribute.md)" |
| msgstr "[속성](../attribute.md)" |
| |
| #: src/conversion.md:3 |
| msgid "" |
| "Primitive types can be converted to each other through [casting](types/" |
| "cast.md)." |
| msgstr "" |
| "기본 타입들은 [캐스팅(casting)](types/cast.md)을 통해 서로 변환될 수 있습니" |
| "다." |
| |
| #: src/conversion.md:5 |
| msgid "" |
| "Rust addresses conversion between custom types (i.e., `struct` and `enum`) " |
| "by the use of [traits](trait.md). The generic conversions will use the " |
| "[`From`](https://doc.rust-lang.org/std/convert/trait.From.html) and [`Into`]" |
| "(https://doc.rust-lang.org/std/convert/trait.Into.html) traits. However " |
| "there are more specific ones for the more common cases, in particular when " |
| "converting to and from `String`s." |
| msgstr "" |
| "Rust는 [트레이트(traits)](trait.md)를 사용하여 사용자 정의 타입(예: " |
| "`struct`, `enum`) 간의 변환을 처리합니다. 범용 변환에는 [`From`](https://" |
| "doc.rust-lang.org/std/convert/trait.From.html)과 [`Into`](https://doc.rust-" |
| "lang.org/std/convert/trait.Into.html) 트레이트를 사용합니다. 하지만 더 흔한 " |
| "경우, 특히 `String`과의 상호 변환을 위한 더 구체적인 트레이트들이 존재합니다." |
| |
| #: src/conversion/from_into.md:3 |
| msgid "" |
| "The [`From`](https://doc.rust-lang.org/std/convert/trait.From.html) and " |
| "[`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) traits are " |
| "inherently linked, and this is actually part of its implementation. If you " |
| "are able to convert type A from type B, then it should be easy to believe " |
| "that we should be able to convert type B to type A." |
| msgstr "" |
| "[`From`](https://doc.rust-lang.org/std/convert/trait.From.html)과 [`Into`]" |
| "(https://doc.rust-lang.org/std/convert/trait.Into.html) 트레이트는 본질적으" |
| "로 연결되어 있으며, 이는 실제로 구현의 일부입니다. 만약 타입 B로부터 타입 A" |
| "를 만들 수 있다면(`From`), 타입 B를 타입 A로 변환할 수 있다(`Into`)는 것을 쉽" |
| "게 알 수 있습니다." |
| |
| #: src/conversion/from_into.md:7 |
| msgid "`From`" |
| msgstr "`From`" |
| |
| #: src/conversion/from_into.md:9 |
| msgid "" |
| "The [`From`](https://doc.rust-lang.org/std/convert/trait.From.html) trait " |
| "allows for a type to define how to create itself from another type, hence " |
| "providing a very simple mechanism for converting between several types. " |
| "There are numerous implementations of this trait within the standard library " |
| "for conversion of primitive and common types." |
| msgstr "" |
| "[`From`](https://doc.rust-lang.org/std/convert/trait.From.html) 트레이트는 " |
| "한 타입이 다른 타입으로부터 자신을 생성하는 방법을 정의할 수 있게 하여, 여러 " |
| "타입 간의 변환을 위한 매우 단순한 메커니즘을 제공합니다. 표준 라이브러리에는 " |
| "기본 타입 및 일반적인 타입의 변환을 위해 이 트레이트가 수없이 많이 구현되어 " |
| "있습니다." |
| |
| #: src/conversion/from_into.md:14 |
| msgid "For example we can easily convert a `str` into a `String`" |
| msgstr "예를 들어, `str`을 `String`으로 쉽게 변환할 수 있습니다." |
| |
| #: src/conversion/from_into.md:21 |
| msgid "We can do something similar for defining a conversion for our own type." |
| msgstr "" |
| "우리는 자신의 타입에 대한 변환을 정의하기 위해 유사한 작업을 수행할 수 있습니" |
| "다." |
| |
| #: src/conversion/from_into.md:39 src/conversion/from_into.md:68 |
| #: src/conversion/from_into.md:98 |
| msgid "\"My number is {:?}\"" |
| msgstr "\"제 숫자는 {:?}입니다\"" |
| |
| #: src/conversion/from_into.md:43 |
| msgid "`Into`" |
| msgstr "`Into`" |
| |
| #: src/conversion/from_into.md:45 |
| msgid "" |
| "The [`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) trait is " |
| "simply the reciprocal of the `From` trait. It defines how to convert a type " |
| "into another type." |
| msgstr "" |
| "[`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) 트레이트는 단" |
| "순히 `From` 트레이트의 반대입니다. 이는 한 타입을 다른 타입으로 변환하는 방법" |
| "을 정의합니다." |
| |
| #: src/conversion/from_into.md:48 |
| msgid "" |
| "Calling `into()` typically requires us to specify the result type as the " |
| "compiler is unable to determine this most of the time." |
| msgstr "" |
| "`into()`를 호출할 때는 일반적으로 결과 타입을 지정해야 합니다. 대부분의 경우 " |
| "컴파일러가 이를 결정할 수 없기 때문입니다." |
| |
| #: src/conversion/from_into.md:66 |
| msgid "// Try removing the type annotation\n" |
| msgstr "// 타입 어노테이션을 제거해 보세요\n" |
| |
| #: src/conversion/from_into.md:72 |
| msgid "`From` and `Into` are interchangeable" |
| msgstr "`From`과 `Into`는 상호 교환 가능합니다" |
| |
| #: src/conversion/from_into.md:74 |
| msgid "" |
| "`From` and `Into` are designed to be complementary. We do not need to " |
| "provide an implementation for both traits. If you have implemented the " |
| "`From` trait for your type, `Into` will call it when necessary. Note, " |
| "however, that the converse is not true: implementing `Into` for your type " |
| "will not automatically provide it with an implementation of `From`." |
| msgstr "" |
| "`From`과 `Into`는 상호 보완적으로 설계되었습니다. 두 트레이트 모두에 대해 구" |
| "현을 제공할 필요는 없습니다. 만약 자신의 타입에 대해 `From` 트레이트를 구현했" |
| "다면, `Into`는 필요할 때 이를 호출할 것입니다. 하지만 그 반대는 성립하지 않음" |
| "에 유의하세요. 즉, 자신의 타입에 대해 `Into`를 구현한다고 해서 `From` 구현이 " |
| "자동으로 제공되지는 않습니다." |
| |
| #: src/conversion/from_into.md:86 |
| msgid "// Define `From`\n" |
| msgstr "// `From` 정의\n" |
| |
| #: src/conversion/from_into.md:96 |
| msgid "// use `Into`\n" |
| msgstr "// `Into` 사용\n" |
| |
| #: src/conversion/try_from_try_into.md:3 |
| msgid "" |
| "Similar to [`From` and `Into`](from_into.html), [`TryFrom`](https://doc.rust-" |
| "lang.org/std/convert/trait.TryFrom.html) and [`TryInto`](https://doc.rust-" |
| "lang.org/std/convert/trait.TryInto.html) are generic traits for converting " |
| "between types. Unlike `From`/`Into`, the `TryFrom`/`TryInto` traits are used " |
| "for fallible conversions, and as such, return [`Result`](https://doc.rust-" |
| "lang.org/std/result/enum.Result.html)s." |
| msgstr "" |
| "[`From`과 `Into`](from_into.html)와 유사하게, [`TryFrom`](https://doc.rust-" |
| "lang.org/std/convert/trait.TryFrom.html)과 [`TryInto`](https://doc.rust-" |
| "lang.org/std/convert/trait.TryInto.html)는 타입 간 변환을 위한 제네릭 트레이" |
| "트입니다. `From`/`Into`와 달리, `TryFrom`/`TryInto` 트레이트는 실패할 가능성" |
| "이 있는 변환에 사용되며, 따라서 [`Result`](https://doc.rust-lang.org/std/" |
| "result/enum.Result.html)를 반환합니다." |
| |
| #: src/conversion/try_from_try_into.md:33 |
| msgid "// TryFrom\n" |
| msgstr "// TryFrom\n" |
| |
| #: src/conversion/try_from_try_into.md:38 |
| msgid "// TryInto\n" |
| msgstr "// TryInto\n" |
| |
| #: src/conversion/string.md:1 |
| msgid "To and from Strings" |
| msgstr "문자열 상호 변환" |
| |
| #: src/conversion/string.md:3 |
| msgid "Converting to String" |
| msgstr "문자열로 변환하기" |
| |
| #: src/conversion/string.md:5 |
| msgid "" |
| "To convert any type to a `String` is as simple as implementing the " |
| "[`ToString`](https://doc.rust-lang.org/std/string/trait.ToString.html) trait " |
| "for the type. Rather than doing so directly, you should implement the " |
| "[`fmt::Display`](https://doc.rust-lang.org/std/fmt/trait.Display.html) trait " |
| "which automatically provides [`ToString`](https://doc.rust-lang.org/std/" |
| "string/trait.ToString.html) and also allows printing the type as discussed " |
| "in the section on [`print!`](../hello/print.md)." |
| msgstr "" |
| "어떤 타입을 `String`으로 변환하는 것은 해당 타입에 대해 [`ToString`](https://" |
| "doc.rust-lang.org/std/string/trait.ToString.html) 트레이트를 구현하는 것만큼 " |
| "간단합니다. 직접 구현하기보다는 [`fmt::Display`](https://doc.rust-lang.org/" |
| "std/fmt/trait.Display.html) 트레이트를 구현하는 것이 좋습니다. 이는 자동으로 " |
| "[`ToString`](https://doc.rust-lang.org/std/string/trait.ToString.html)을 제공" |
| "할 뿐만 아니라, [`print!`](../hello/print.md) 섹션에서 다룬 것처럼 해당 타입" |
| "을 출력할 수 있게 해줍니다." |
| |
| #: src/conversion/string.md:19 |
| msgid "\"Circle of radius {}\"" |
| msgstr "\"반지름이 {}인 원\"" |
| |
| #: src/conversion/string.md:29 |
| msgid "Parsing a String" |
| msgstr "문자열 파싱하기" |
| |
| #: src/conversion/string.md:31 |
| msgid "" |
| "It's useful to convert strings into many types, but one of the more common " |
| "string operations is to convert them from string to number. The idiomatic " |
| "approach to this is to use the [`parse`](https://doc.rust-lang.org/std/" |
| "primitive.str.html#method.parse) function and either to arrange for type " |
| "inference or to specify the type to parse using the 'turbofish' syntax. Both " |
| "alternatives are shown in the following example." |
| msgstr "" |
| "문자열을 여러 타입으로 변환하는 것은 유용하지만, 가장 흔한 작업 중 하나는 문" |
| "자열을 숫자로 변환하는 것입니다. 이에 대한 관용적인 방법은 [`parse`](https://" |
| "doc.rust-lang.org/std/primitive.str.html#method.parse) 함수를 사용하는 것이" |
| "며, 타입 추론을 이용하거나 'turbofish' 구문을 사용하여 파싱할 타입을 지정할 " |
| "수 있습니다. 다음 예제에 두 가지 방식이 모두 나와 있습니다." |
| |
| #: src/conversion/string.md:37 |
| msgid "" |
| "This will convert the string into the type specified as long as the " |
| "[`FromStr`](https://doc.rust-lang.org/std/str/trait.FromStr.html) trait is " |
| "implemented for that type. This is implemented for numerous types within the " |
| "standard library." |
| msgstr "" |
| "해당 타입에 대해 [`FromStr`](https://doc.rust-lang.org/std/str/" |
| "trait.FromStr.html) 트레이트가 구현되어 있다면 문자열을 지정된 타입으로 변환" |
| "합니다. 표준 라이브러리의 수많은 타입에 대해 이 트레이트가 구현되어 있습니다." |
| |
| #: src/conversion/string.md:43 src/std_misc/process/wait.md:10 |
| msgid "\"5\"" |
| msgstr "\"5\"" |
| |
| #: src/conversion/string.md:44 src/error/result.md:33 src/error/result.md:68 |
| #: src/error/result/result_map.md:42 src/error/result/result_map.md:75 |
| #: src/error/result/result_alias.md:36 src/error/result/early_returns.md:36 |
| #: src/error/result/enter_question_mark.md:34 |
| #: src/error/result/enter_question_mark.md:67 |
| msgid "\"10\"" |
| msgstr "\"10\"" |
| |
| #: src/conversion/string.md:47 |
| msgid "\"Sum: {:?}\"" |
| msgstr "\"합계: {:?}\"" |
| |
| #: src/conversion/string.md:51 |
| msgid "" |
| "To obtain this functionality on a user defined type simply implement the " |
| "[`FromStr`](https://doc.rust-lang.org/std/str/trait.FromStr.html) trait for " |
| "that type." |
| msgstr "" |
| "사용자 정의 타입에서 이 기능을 사용하려면 해당 타입에 대해 [`FromStr`]" |
| "(https://doc.rust-lang.org/std/str/trait.FromStr.html) 트레이트를 구현하기만 " |
| "하면 됩니다." |
| |
| #: src/conversion/string.md:74 |
| msgid "\" 3 \"" |
| msgstr "\" 3 \"" |
| |
| #: src/expression.md:3 |
| msgid "A Rust program is (mostly) made up of a series of statements:" |
| msgstr "Rust 프로그램은 (대부분) 일련의 문장(statements)으로 구성됩니다:" |
| |
| #: src/expression.md:7 |
| msgid "" |
| "// statement\n" |
| " // statement\n" |
| " // statement\n" |
| msgstr "" |
| "// 문장\n" |
| " // 문장\n" |
| " // 문장\n" |
| |
| #: src/expression.md:13 |
| msgid "" |
| "There are a few kinds of statements in Rust. The most common two are " |
| "declaring a variable binding, and using a `;` with an expression:" |
| msgstr "" |
| "Rust에는 몇 가지 종류의 문장이 있습니다. 가장 흔한 두 가지는 변수 바인딩을 선" |
| "언하는 것과 표현식에 `;`를 사용하는 것입니다:" |
| |
| #: src/expression.md:18 |
| msgid "// variable binding\n" |
| msgstr "// 변수 바인딩\n" |
| |
| #: src/expression.md:21 |
| msgid "// expression;\n" |
| msgstr "// 표현식;\n" |
| |
| #: src/expression.md:28 |
| msgid "" |
| "Blocks are expressions too, so they can be used as values in assignments. " |
| "The last expression in the block will be assigned to the place expression " |
| "such as a local variable. However, if the last expression of the block ends " |
| "with a semicolon, the return value will be `()`." |
| msgstr "" |
| "블록도 표현식이므로 할당 시 값으로 사용될 수 있습니다. 블록의 마지막 표현식" |
| "은 로컬 변수와 같은 장소 표현식(place expression)에 할당됩니다. 하지만 블록" |
| "의 마지막 표현식이 세미콜론으로 끝나면 반환 값은 `()`가 됩니다." |
| |
| #: src/expression.md:41 |
| msgid "// This expression will be assigned to `y`\n" |
| msgstr "// 이 표현식은 `y`에 할당됩니다\n" |
| |
| #: src/expression.md:46 |
| msgid "" |
| "// The semicolon suppresses this expression and `()` is assigned to `z`\n" |
| msgstr "// 세미콜론이 이 표현식을 억제하여 `z`에는 `()`가 할당됩니다\n" |
| |
| #: src/expression.md:50 |
| msgid "\"x is {:?}\"" |
| msgstr "\"x는 {:?}입니다\"" |
| |
| #: src/expression.md:51 |
| msgid "\"y is {:?}\"" |
| msgstr "\"y는 {:?}입니다\"" |
| |
| #: src/expression.md:52 |
| msgid "\"z is {:?}\"" |
| msgstr "\"z는 {:?}입니다\"" |
| |
| #: src/flow_control.md:3 |
| msgid "" |
| "An integral part of any programming language are ways to modify control " |
| "flow: `if`/`else`, `for`, and others. Let's talk about them in Rust." |
| msgstr "" |
| "모든 프로그래밍 언어의 필수적인 부분은 제어 흐름을 수정하는 방법입니다: `if`/" |
| "`else`, `for` 등. Rust에서의 제어 흐름에 대해 이야기해 봅시다." |
| |
| #: src/flow_control/if_else.md:3 |
| msgid "" |
| "Branching with `if`\\-`else` is similar to other languages. Unlike many of " |
| "them, the boolean condition doesn't need to be surrounded by parentheses, " |
| "and each condition is followed by a block. `if`\\-`else` conditionals are " |
| "expressions, and, all branches must return the same type." |
| msgstr "" |
| "`if`\\-`else`를 사용한 분기는 다른 언어와 유사합니다. 많은 언어와 달리 불리" |
| "언 조건은 괄호로 둘러쌀 필요가 없으며, 각 조건 뒤에는 블록이 옵니다. `if`\\-" |
| "`else` 조건문은 표현식이며, 모든 분기는 동일한 타입을 반환해야 합니다." |
| |
| #: src/flow_control/if_else.md:13 |
| msgid "\"{} is negative\"" |
| msgstr "\"{}은(는) 음수입니다\"" |
| |
| #: src/flow_control/if_else.md:15 |
| msgid "\"{} is positive\"" |
| msgstr "\"{}은(는) 양수입니다\"" |
| |
| #: src/flow_control/if_else.md:17 |
| msgid "\"{} is zero\"" |
| msgstr "\"{}은(는) 0입니다\"" |
| |
| #: src/flow_control/if_else.md:22 |
| msgid "\", and is a small number, increase ten-fold\"" |
| msgstr "\", 그리고 작은 수이므로 10배 증가시킵니다\"" |
| |
| #: src/flow_control/if_else.md:24 |
| msgid "// This expression returns an `i32`.\n" |
| msgstr "// 이 표현식은 `i32`를 반환합니다.\n" |
| |
| #: src/flow_control/if_else.md:27 |
| msgid "\", and is a big number, halve the number\"" |
| msgstr "\", 그리고 큰 수이므로 반으로 나눕니다\"" |
| |
| #: src/flow_control/if_else.md:29 |
| msgid "// This expression must return an `i32` as well.\n" |
| msgstr "// 이 표현식 또한 `i32`를 반환해야 합니다.\n" |
| |
| #: src/flow_control/if_else.md:31 |
| msgid "// TODO ^ Try suppressing this expression with a semicolon.\n" |
| msgstr "// TODO ^ 세미콜론을 사용하여 이 표현식을 억제해 보세요.\n" |
| |
| #: src/flow_control/if_else.md:33 |
| msgid "" |
| "// ^ Don't forget to put a semicolon here! All `let` bindings need it.\n" |
| msgstr "" |
| "// ^ 여기에 세미콜론을 넣는 것을 잊지 마세요! 모든 `let` 바인딩에 필요합니" |
| "다.\n" |
| |
| #: src/flow_control/if_else.md:35 src/flow_control/match.md:35 |
| msgid "\"{} -> {}\"" |
| msgstr "\"{} -> {}\"" |
| |
| #: src/flow_control/loop.md:3 |
| msgid "Rust provides a `loop` keyword to indicate an infinite loop." |
| msgstr "Rust는 무한 루프를 나타내기 위해 `loop` 키워드를 제공합니다." |
| |
| #: src/flow_control/loop.md:5 |
| msgid "" |
| "The `break` statement can be used to exit a loop at anytime, whereas the " |
| "`continue` statement can be used to skip the rest of the iteration and start " |
| "a new one." |
| msgstr "" |
| "`break` 문은 언제든지 루프를 종료하는 데 사용할 수 있으며, `continue` 문은 나" |
| "머지 반복을 건너뛰고 새로운 반복을 시작하는 데 사용될 수 있습니다." |
| |
| #: src/flow_control/loop.md:13 |
| msgid "\"Let's count until infinity!\"" |
| msgstr "\"무한대까지 세어봅시다!\"" |
| |
| #: src/flow_control/loop.md:15 |
| msgid "// Infinite loop\n" |
| msgstr "// 무한 루프\n" |
| |
| #: src/flow_control/loop.md:20 |
| msgid "\"three\"" |
| msgstr "\"3\"" |
| |
| #: src/flow_control/loop.md:22 |
| msgid "// Skip the rest of this iteration\n" |
| msgstr "// 이번 반복의 나머지를 건너뜁니다\n" |
| |
| #: src/flow_control/loop.md:29 |
| msgid "\"OK, that's enough\"" |
| msgstr "\"좋아요, 그만하면 됐습니다\"" |
| |
| #: src/flow_control/loop.md:31 |
| msgid "// Exit this loop\n" |
| msgstr "// 이 루프를 종료합니다\n" |
| |
| #: src/flow_control/loop/nested.md:3 |
| msgid "" |
| "It's possible to `break` or `continue` outer loops when dealing with nested " |
| "loops. In these cases, the loops must be annotated with some `'label`, and " |
| "the label must be passed to the `break`/`continue` statement." |
| msgstr "" |
| "중첩 루프를 다룰 때 외부 루프를 `break`하거나 `continue`하는 것이 가능합니" |
| "다. 이 경우 루프에는 어떤 `'label`을 붙여야 하며, 해당 레이블은 `break`/" |
| "`continue` 문에 전달되어야 합니다." |
| |
| #: src/flow_control/loop/nested.md:12 |
| msgid "\"Entered the outer loop\"" |
| msgstr "\"외부 루프에 진입했습니다\"" |
| |
| #: src/flow_control/loop/nested.md:15 |
| msgid "\"Entered the inner loop\"" |
| msgstr "\"내부 루프에 진입했습니다\"" |
| |
| #: src/flow_control/loop/nested.md:17 |
| msgid "" |
| "// This would break only the inner loop\n" |
| " //break;\n" |
| msgstr "" |
| "// 이것은 내부 루프만 종료시킵니다\n" |
| " //break;\n" |
| |
| #: src/flow_control/loop/nested.md:20 |
| msgid "// This breaks the outer loop\n" |
| msgstr "// 이것은 외부 루프를 종료시킵니다\n" |
| |
| #: src/flow_control/loop/nested.md:24 |
| msgid "\"This point will never be reached\"" |
| msgstr "\"이 지점에는 결코 도달하지 않습니다\"" |
| |
| #: src/flow_control/loop/nested.md:27 |
| msgid "\"Exited the outer loop\"" |
| msgstr "\"외부 루프에서 나갔습니다\"" |
| |
| #: src/flow_control/loop/return.md:3 |
| msgid "" |
| "One of the uses of a `loop` is to retry an operation until it succeeds. If " |
| "the operation returns a value though, you might need to pass it to the rest " |
| "of the code: put it after the `break`, and it will be returned by the `loop` " |
| "expression." |
| msgstr "" |
| "성공할 때까지 작업을 재시도하는 것이 `loop`의 용도 중 하나입니다. 만약 작업" |
| "이 값을 반환한다면, 이를 코드의 나머지 부분으로 전달해야 할 수도 있습니다. " |
| "`break` 뒤에 값을 넣으면 `loop` 표현식에 의해 그 값이 반환됩니다." |
| |
| #: src/flow_control/while.md:3 |
| msgid "" |
| "The `while` keyword can be used to run a loop while a condition is true." |
| msgstr "" |
| "`while` 키워드는 조건이 참(true)인 동안 루프를 실행하는 데 사용될 수 있습니" |
| "다." |
| |
| #: src/flow_control/while.md:5 |
| msgid "" |
| "Let's write the infamous [FizzBuzz](https://en.wikipedia.org/wiki/Fizz_buzz) " |
| "using a `while` loop." |
| msgstr "" |
| "악명 높은 [FizzBuzz](https://en.wikipedia.org/wiki/Fizz_buzz)를 `while` 루프" |
| "를 사용하여 작성해 봅시다." |
| |
| #: src/flow_control/while.md:9 |
| msgid "// A counter variable\n" |
| msgstr "// 카운터 변수\n" |
| |
| #: src/flow_control/while.md:12 |
| msgid "// Loop while `n` is less than 101\n" |
| msgstr "// `n`이 101보다 작은 동안 루프 실행\n" |
| |
| #: src/flow_control/while.md:15 src/flow_control/for.md:17 |
| #: src/flow_control/for.md:37 src/fn.md:34 |
| msgid "\"fizzbuzz\"" |
| msgstr "\"fizzbuzz\"" |
| |
| #: src/flow_control/while.md:17 src/flow_control/for.md:19 |
| #: src/flow_control/for.md:39 src/fn.md:36 |
| msgid "\"fizz\"" |
| msgstr "\"fizz\"" |
| |
| #: src/flow_control/while.md:19 src/flow_control/for.md:21 |
| #: src/flow_control/for.md:41 src/fn.md:38 |
| msgid "\"buzz\"" |
| msgstr "\"buzz\"" |
| |
| #: src/flow_control/while.md:24 |
| msgid "// Increment counter\n" |
| msgstr "// 카운터 증가\n" |
| |
| #: src/flow_control/for.md:1 |
| msgid "for loops" |
| msgstr "for 루프" |
| |
| #: src/flow_control/for.md:5 |
| msgid "" |
| "The `for in` construct can be used to iterate through an `Iterator`. One of " |
| "the easiest ways to create an iterator is to use the range notation `a..b`. " |
| "This yields values from `a` (inclusive) to `b` (exclusive) in steps of one." |
| msgstr "" |
| "`for in` 구문은 `Iterator`를 통해 반복하는 데 사용될 수 있습니다. 이터레이터" |
| "를 만드는 가장 쉬운 방법 중 하나는 범위 표기법 `a..b`를 사용하는 것입니다. 이" |
| "는 `a`(포함)부터 `b`(미포함)까지의 값을 1씩 증가시키며 생성합니다." |
| |
| #: src/flow_control/for.md:10 |
| msgid "Let's write FizzBuzz using `for` instead of `while`." |
| msgstr "`while` 대신 `for`를 사용하여 FizzBuzz를 작성해 봅시다." |
| |
| #: src/flow_control/for.md:14 src/flow_control/for.md:34 |
| msgid "// `n` will take the values: 1, 2, ..., 100 in each iteration\n" |
| msgstr "// 각 반복에서 `n`은 1, 2, ..., 100의 값을 갖게 됩니다.\n" |
| |
| #: src/flow_control/for.md:29 |
| msgid "" |
| "Alternatively, `a..=b` can be used for a range that is inclusive on both " |
| "ends. The above can be written as:" |
| msgstr "" |
| "또는 양쪽 끝을 모두 포함하는 범위에는 `a..=b`를 사용할 수 있습니다. 위의 코드" |
| "는 다음과 같이 작성될 수 있습니다:" |
| |
| #: src/flow_control/for.md:49 |
| msgid "for and iterators" |
| msgstr "for와 이터레이터" |
| |
| #: src/flow_control/for.md:51 |
| msgid "" |
| "The `for in` construct is able to interact with an `Iterator` in several " |
| "ways. As discussed in the section on the [Iterator](../trait/iter.md) trait, " |
| "by default the `for` loop will apply the `into_iter` function to the " |
| "collection. However, this is not the only means of converting collections " |
| "into iterators." |
| msgstr "" |
| "`for in` 구문은 여러 방식으로 `Iterator`와 상호작용할 수 있습니다. [Iterator]" |
| "(../trait/iter.md) 트레이트 섹션에서 다룬 것처럼, 기본적으로 `for` 루프는 컬" |
| "렉션에 `into_iter` 함수를 적용합니다. 하지만 이것이 컬렉션을 이터레이터로 변" |
| "환하는 유일한 방법은 아닙니다." |
| |
| #: src/flow_control/for.md:56 |
| msgid "" |
| "`into_iter`, `iter` and `iter_mut` all handle the conversion of a collection " |
| "into an iterator in different ways, by providing different views on the data " |
| "within." |
| msgstr "" |
| "`into_iter`, `iter`, `iter_mut`은 모두 내부 데이터에 대해 서로 다른 뷰를 제공" |
| "함으로써 컬렉션을 이터레이터로 변환하는 작업을 서로 다른 방식으로 처리합니다." |
| |
| #: src/flow_control/for.md:60 |
| msgid "" |
| "`iter` - This borrows each element of the collection through each iteration. " |
| "Thus leaving the collection untouched and available for reuse after the loop." |
| msgstr "" |
| "`iter` - 매 반복마다 컬렉션의 각 요소를 빌려옵니다. 따라서 컬렉션은 수정되지 " |
| "않은 상태로 유지되며 루프 이후에도 재사용할 수 있습니다." |
| |
| #: src/flow_control/for.md:65 src/flow_control/for.md:85 |
| #: src/flow_control/for.md:104 |
| msgid "\"Frank\"" |
| msgstr "\"프랭크\"" |
| |
| #: src/flow_control/for.md:65 src/flow_control/for.md:69 |
| #: src/flow_control/for.md:85 src/flow_control/for.md:89 |
| #: src/flow_control/for.md:104 src/flow_control/for.md:108 |
| msgid "\"Ferris\"" |
| msgstr "\"페리스\"" |
| |
| #: src/flow_control/for.md:69 src/flow_control/for.md:89 |
| #: src/flow_control/for.md:108 |
| msgid "\"There is a rustacean among us!\"" |
| msgstr "\"우리 중에 러스타시안(rustacean)이 있습니다!\"" |
| |
| #: src/flow_control/for.md:70 |
| msgid "// TODO ^ Try deleting the & and matching just \"Ferris\"\n" |
| msgstr "// TODO ^ &를 삭제하고 그냥 \"Ferris\"와 매칭해 보세요\n" |
| |
| #: src/flow_control/for.md:71 src/flow_control/for.md:90 |
| msgid "\"Hello {}\"" |
| msgstr "\"안녕 {}\"" |
| |
| #: src/flow_control/for.md:75 src/flow_control/for.md:94 |
| #: src/flow_control/for.md:113 |
| msgid "\"names: {:?}\"" |
| msgstr "\"이름들: {:?}\"" |
| |
| #: src/flow_control/for.md:79 |
| msgid "" |
| "`into_iter` - This consumes the collection so that on each iteration the " |
| "exact data is provided. Once the collection has been consumed it is no " |
| "longer available for reuse as it has been 'moved' within the loop." |
| msgstr "" |
| "`into_iter` - 컬렉션을 소비(consume)하여 각 반복마다 실제 데이터를 제공합니" |
| "다. 컬렉션이 소비되면 루프 내에서 '이동(moved)'된 것이므로 더 이상 재사용할 " |
| "수 없습니다." |
| |
| #: src/flow_control/for.md:99 |
| msgid "" |
| "`iter_mut` - This mutably borrows each element of the collection, allowing " |
| "for the collection to be modified in place." |
| msgstr "" |
| "`iter_mut` - 컬렉션의 각 요소를 가변적으로 빌려와서, 컬렉션을 제자리에서 수정" |
| "할 수 있게 합니다." |
| |
| #: src/flow_control/for.md:109 |
| msgid "\"Hello\"" |
| msgstr "\"안녕\"" |
| |
| #: src/flow_control/for.md:117 |
| msgid "" |
| "In the above snippets note the type of `match` branch, that is the key " |
| "difference in the types of iteration. The difference in type then of course " |
| "implies differing actions that are able to be performed." |
| msgstr "" |
| "위의 스니펫에서 `match` 분기의 타입에 주목하세요. 이것이 반복 방식의 핵심적" |
| "인 차이점입니다. 타입의 차이는 물론 수행할 수 있는 작업의 차이를 의미합니다." |
| |
| #: src/flow_control/for.md:123 |
| msgid "[Iterator](../trait/iter.md)" |
| msgstr "[Iterator](../trait/iter.md)" |
| |
| #: src/flow_control/match.md:3 |
| msgid "" |
| "Rust provides pattern matching via the `match` keyword, which can be used " |
| "like a C `switch`. The first matching arm is evaluated and all possible " |
| "values must be covered." |
| msgstr "" |
| "Rust는 `match` 키워드를 통해 패턴 매칭을 제공하며, 이는 C의 `switch`처럼 사용" |
| "될 수 있습니다. 첫 번째로 매칭되는 팔(arm)이 실행되며, 가능한 모든 값을 다뤄" |
| "야 합니다." |
| |
| #: src/flow_control/match.md:10 |
| msgid "// TODO ^ Try different values for `number`\n" |
| msgstr "// TODO ^ `number`에 다른 값을 넣어보세요\n" |
| |
| #: src/flow_control/match.md:12 |
| msgid "\"Tell me about {}\"" |
| msgstr "\"{}에 대해 알려주세요\"" |
| |
| #: src/flow_control/match.md:14 |
| msgid "// Match a single value\n" |
| msgstr "// 단일 값 매칭\n" |
| |
| #: src/flow_control/match.md:15 |
| msgid "\"One!\"" |
| msgstr "\"1입니다!\"" |
| |
| #: src/flow_control/match.md:16 |
| msgid "// Match several values\n" |
| msgstr "// 여러 값 매칭\n" |
| |
| #: src/flow_control/match.md:17 |
| msgid "\"This is a prime\"" |
| msgstr "\"이것은 소수입니다\"" |
| |
| #: src/flow_control/match.md:18 |
| msgid "" |
| "// TODO ^ Try adding 13 to the list of prime values\n" |
| " // Match an inclusive range\n" |
| msgstr "" |
| "// TODO ^ 소수 목록에 13을 추가해 보세요\n" |
| " // 포함 범위를 매칭\n" |
| |
| #: src/flow_control/match.md:20 |
| msgid "\"A teen\"" |
| msgstr "\"10대입니다\"" |
| |
| #: src/flow_control/match.md:21 |
| msgid "// Handle the rest of cases\n" |
| msgstr "// 나머지 경우 처리\n" |
| |
| #: src/flow_control/match.md:22 |
| msgid "\"Ain't special\"" |
| msgstr "\"특별할 것 없습니다\"" |
| |
| #: src/flow_control/match.md:23 |
| msgid "// TODO ^ Try commenting out this catch-all arm\n" |
| msgstr "" |
| "// TODO ^ 이 모든 경우를 처리하는 팔(catch-all arm)을 주석 처리해 보세요\n" |
| |
| #: src/flow_control/match.md:27 |
| msgid "// Match is an expression too\n" |
| msgstr "// Match도 표현식입니다\n" |
| |
| #: src/flow_control/match.md:29 |
| msgid "// The arms of a match must cover all the possible values\n" |
| msgstr "// match의 팔들은 가능한 모든 값을 다뤄야 합니다\n" |
| |
| #: src/flow_control/match.md:32 |
| msgid "// TODO ^ Try commenting out one of these arms\n" |
| msgstr "// TODO ^ 이 팔들 중 하나를 주석 처리해 보세요\n" |
| |
| #: src/flow_control/match/destructuring.md:3 |
| msgid "A `match` block can destructure items in a variety of ways." |
| msgstr "" |
| "`match` 블록은 다양한 방식으로 아이템을 구조 분해(destructure)할 수 있습니다." |
| |
| #: src/flow_control/match/destructuring.md:5 |
| msgid "[Destructuring Tuples](destructuring/destructure_tuple.md)" |
| msgstr "[튜플 구조 분해](destructuring/destructure_tuple.md)" |
| |
| #: src/flow_control/match/destructuring.md:6 |
| msgid "[Destructuring Arrays and Slices](destructuring/destructure_slice.md)" |
| msgstr "[배열과 슬라이스 구조 분해](destructuring/destructure_slice.md)" |
| |
| #: src/flow_control/match/destructuring.md:7 |
| msgid "[Destructuring Enums](destructuring/destructure_enum.md)" |
| msgstr "[열거형 구조 분해](destructuring/destructure_enum.md)" |
| |
| #: src/flow_control/match/destructuring.md:8 |
| msgid "[Destructuring Pointers](destructuring/destructure_pointers.md)" |
| msgstr "[포인터 구조 분해](destructuring/destructure_pointers.md)" |
| |
| #: src/flow_control/match/destructuring.md:9 |
| msgid "[Destructuring Structures](destructuring/destructure_structures.md)" |
| msgstr "[구조체 구조 분해](destructuring/destructure_structures.md)" |
| |
| #: src/flow_control/match/destructuring.md:19 |
| msgid "" |
| "[The Rust Reference for Destructuring](https://doc.rust-lang.org/reference/" |
| "patterns.html#r-patterns.destructure)" |
| msgstr "" |
| "[구조 분해에 관한 Rust 레퍼런스](https://doc.rust-lang.org/reference/" |
| "patterns.html#r-patterns.destructure)" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:3 |
| msgid "Tuples can be destructured in a `match` as follows:" |
| msgstr "튜플은 `match`에서 다음과 같이 구조 분해될 수 있습니다:" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:8 |
| msgid "// TODO ^ Try different values for `triple`\n" |
| msgstr "// TODO ^ `triple`에 다른 값을 넣어보세요\n" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:10 |
| msgid "\"Tell me about {:?}\"" |
| msgstr "\"{:?}에 대해 알려주세요\"" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:11 |
| msgid "// Match can be used to destructure a tuple\n" |
| msgstr "// match를 사용하여 튜플을 구조 분해할 수 있습니다\n" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:13 |
| msgid "// Destructure the second and third elements\n" |
| msgstr "// 두 번째와 세 번째 요소를 구조 분해합니다\n" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:14 |
| msgid "\"First is `0`, `y` is {:?}, and `z` is {:?}\"" |
| msgstr "\"첫 번째는 `0`이고, `y`는 {:?}, `z`는 {:?}입니다\"" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:15 |
| msgid "\"First is `1` and the rest doesn't matter\"" |
| msgstr "\"첫 번째는 `1`이고 나머지는 상관없습니다\"" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:16 |
| msgid "\"last is `2` and the rest doesn't matter\"" |
| msgstr "\"마지막은 `2`이고 나머지는 상관없습니다\"" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:17 |
| msgid "\"First is `3`, last is `4`, and the rest doesn't matter\"" |
| msgstr "\"첫 번째는 `3`, 마지막은 `4`이며 나머지는 상관없습니다\"" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:18 |
| msgid "// `..` can be used to ignore the rest of the tuple\n" |
| msgstr "// `..`을 사용하여 튜플의 나머지를 무시할 수 있습니다\n" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:19 |
| msgid "\"It doesn't matter what they are\"" |
| msgstr "\"그것들이 무엇이든 상관없습니다\"" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:20 |
| msgid "// `_` means don't bind the value to a variable\n" |
| msgstr "// `_`는 값을 변수에 바인딩하지 않음을 의미합니다\n" |
| |
| #: src/flow_control/match/destructuring/destructure_tuple.md:27 |
| msgid "[Tuples](../../../primitives/tuples.md)" |
| msgstr "[튜플](../../../primitives/tuples.md)" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:3 |
| msgid "Like tuples, arrays and slices can be destructured this way:" |
| msgstr "" |
| "튜플과 마찬가지로, 배열과 슬라이스도 다음과 같은 방식으로 구조 분해될 수 있습" |
| "니다:" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:7 |
| msgid "// Try changing the values in the array, or make it a slice!\n" |
| msgstr "// 배열의 값을 변경하거나 슬라이스로 만들어 보세요!\n" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:11 |
| msgid "" |
| "// Binds the second and the third elements to the respective variables\n" |
| msgstr "// 두 번째와 세 번째 요소를 각각의 변수에 바인딩합니다\n" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:13 |
| msgid "\"array[0] = 0, array[1] = {}, array[2] = {}\"" |
| msgstr "\"array[0] = 0, array[1] = {}, array[2] = {}\"" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:15 |
| msgid "// Single values can be ignored with _\n" |
| msgstr "// 단일 값은 _로 무시할 수 있습니다\n" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:17 |
| msgid "\"array[0] = 1, array[2] = {} and array[1] was ignored\"" |
| msgstr "\"array[0] = 1, array[2] = {} 이고 array[1]은 무시되었습니다\"" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:21 |
| msgid "// You can also bind some and ignore the rest\n" |
| msgstr "// 일부만 바인딩하고 나머지는 무시할 수도 있습니다\n" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:23 |
| msgid "\"array[0] = -1, array[1] = {} and all the other ones were ignored\"" |
| msgstr "\"array[0] = -1, array[1] = {} 이고 다른 모든 것들은 무시되었습니다\"" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:26 |
| msgid "" |
| "// The code below would not compile\n" |
| " // [-1, second] => ...\n" |
| msgstr "" |
| "// 아래 코드는 컴파일되지 않습니다\n" |
| " // [-1, second] => ...\n" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:29 |
| msgid "" |
| "// Or store them in another array/slice (the type depends on\n" |
| " // that of the value that is being matched against)\n" |
| msgstr "" |
| "// 또는 다른 배열/슬라이스에 저장할 수도 있습니다 (타입은 매칭되는 값의 타입" |
| "에 따라 달라집니다)\n" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:32 |
| msgid "\"array[0] = 3, array[1] = {} and the other elements were {:?}\"" |
| msgstr "\"array[0] = 3, array[1] = {} 이고 다른 요소들은 {:?}입니다\"" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:36 |
| msgid "" |
| "// Combining these patterns, we can, for example, bind the first and\n" |
| " // last values, and store the rest of them in a single array\n" |
| msgstr "" |
| "// 이러한 패턴들을 결합하여, 예를 들어 첫 번째와 마지막 값을 바인딩하고 나머" |
| "지는 하나의 배열에 저장할 수 있습니다\n" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:39 |
| msgid "\"array[0] = {}, middle = {:?}, array[2] = {}\"" |
| msgstr "\"array[0] = {}, middle = {:?}, array[2] = {}\"" |
| |
| #: src/flow_control/match/destructuring/destructure_slice.md:48 |
| msgid "" |
| "[Arrays and Slices](../../../primitives/array.md) and [Binding](../" |
| "binding.md) for `@` sigil" |
| msgstr "" |
| "[배열과 슬라이스](../../../primitives/array.md) 그리고 `@` 기호를 사용한 [바" |
| "인딩](../binding.md)" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:3 |
| msgid "An `enum` is destructured similarly:" |
| msgstr "`enum`도 비슷하게 구조 분해됩니다:" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:6 |
| msgid "" |
| "// `allow` required to silence warnings because only\n" |
| "// one variant is used.\n" |
| msgstr "" |
| "// 단 하나의 변체만 사용되므로 경고를 억제하기 위해 `allow`가 필요합니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:10 |
| msgid "// These 3 are specified solely by their name.\n" |
| msgstr "// 이 세 가지는 오직 이름으로만 지정됩니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:14 |
| msgid "// These likewise tie `u32` tuples to different names: color models.\n" |
| msgstr "" |
| "// 이들은 마찬가지로 `u32` 튜플을 서로 다른 이름(컬러 모델)에 연결합니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:24 |
| msgid "// TODO ^ Try different variants for `color`\n" |
| msgstr "// TODO ^ `color`에 다른 변체들을 넣어보세요\n" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:26 |
| msgid "\"What color is it?\"" |
| msgstr "\"이것은 무슨 색인가요?\"" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:27 |
| msgid "// An `enum` can be destructured using a `match`.\n" |
| msgstr "// `match`를 사용하여 `enum`을 구조 분해할 수 있습니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:29 |
| msgid "\"The color is Red!\"" |
| msgstr "\"빨간색입니다!\"" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:30 |
| msgid "\"The color is Blue!\"" |
| msgstr "\"파란색입니다!\"" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:31 |
| msgid "\"The color is Green!\"" |
| msgstr "\"초록색입니다!\"" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:33 |
| msgid "\"Red: {}, green: {}, and blue: {}!\"" |
| msgstr "\"빨강: {}, 초록: {}, 파랑: {}!\"" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:35 |
| msgid "\"Hue: {}, saturation: {}, value: {}!\"" |
| msgstr "\"색상: {}, 채도: {}, 명도: {}!\"" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:37 |
| msgid "\"Hue: {}, saturation: {}, lightness: {}!\"" |
| msgstr "\"색상: {}, 채도: {}, 밝기: {}!\"" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:39 |
| msgid "\"Cyan: {}, magenta: {}, yellow: {}!\"" |
| msgstr "\"청록: {}, 자주: {}, 노랑: {}!\"" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:41 |
| msgid "\"Cyan: {}, magenta: {}, yellow: {}, key (black): {}!\"" |
| msgstr "\"청록: {}, 자주: {}, 노랑: {}, 검정: {}!\"" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:43 |
| msgid "// Don't need another arm because all variants have been examined\n" |
| msgstr "// 모든 변체를 검사했으므로 다른 팔(arm)은 필요하지 않습니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_enum.md:50 |
| msgid "" |
| "[`#[allow(...)]`](../../../attribute/unused.md), [color models](https://" |
| "en.wikipedia.org/wiki/Color_model) and [`enum`](../../../custom_types/" |
| "enum.md)" |
| msgstr "" |
| "[`#[allow(...)]`](../../../attribute/unused.md), [컬러 모델](https://" |
| "en.wikipedia.org/wiki/Color_model) 및 [`enum`](../../../custom_types/enum.md)" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:3 |
| msgid "" |
| "For pointers, a distinction needs to be made between destructuring and " |
| "dereferencing as they are different concepts which are used differently from " |
| "languages like C/C++." |
| msgstr "" |
| "포인터의 경우, 구조 분해(destructuring)와 역참조(dereferencing)를 구분해야 합" |
| "니다. 이들은 C/C++와 같은 언어와는 다르게 사용되는 서로 다른 개념이기 때문입" |
| "니다." |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:7 |
| msgid "Dereferencing uses `*`" |
| msgstr "역참조는 `*`를 사용합니다" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:8 |
| msgid "Destructuring uses `&`, `ref`, and `ref mut`" |
| msgstr "구조 분해는 `&`, `ref`, `ref mut`을 사용합니다" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:12 |
| msgid "" |
| "// Assign a reference of type `i32`. The `&` signifies there\n" |
| " // is a reference being assigned.\n" |
| msgstr "" |
| "// `i32` 타입의 참조를 할당합니다. `&`는 참조가 할당되고 있음을 나타냅니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:17 |
| msgid "" |
| "// If `reference` is pattern matched against `&val`, it results\n" |
| " // in a comparison like:\n" |
| " // `&i32`\n" |
| " // `&val`\n" |
| " // ^ We see that if the matching `&`s are dropped, then the `i32`\n" |
| " // should be assigned to `val`.\n" |
| msgstr "" |
| "// 만약 `reference`를 `&val`에 대해 패턴 매칭하면, 다음과 같은 비교 결과가 됩" |
| "니다:\n" |
| "// `&i32`\n" |
| "// `&val`\n" |
| "// ^ 매칭되는 `&`들을 떼어내면, `i32`가 `val`에 할당되어야 함을 알 수 있습니" |
| "다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:23 |
| msgid "\"Got a value via destructuring: {:?}\"" |
| msgstr "\"구조 분해를 통해 값을 얻었습니다: {:?}\"" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:26 |
| msgid "// To avoid the `&`, you dereference before matching.\n" |
| msgstr "// `&`를 피하려면, 매칭하기 전에 역참조를 수행합니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:28 |
| msgid "\"Got a value via dereferencing: {:?}\"" |
| msgstr "\"역참조를 통해 값을 얻었습니다: {:?}\"" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:31 |
| msgid "" |
| "// What if you don't start with a reference? `reference` was a `&`\n" |
| " // because the right side was already a reference. This is not\n" |
| " // a reference because the right side is not one.\n" |
| msgstr "" |
| "// 참조로 시작하지 않는다면 어떨까요? `reference`는 오른쪽이 이미\n" |
| "// 참조였기 때문에 `&`였습니다. 이것은 오른쪽이 참조가 아니기 때문에\n" |
| "// 참조가 아닙니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:36 |
| msgid "" |
| "// Rust provides `ref` for exactly this purpose. It modifies the\n" |
| " // assignment so that a reference is created for the element; this\n" |
| " // reference is assigned.\n" |
| msgstr "" |
| "// Rust는 정확히 이 목적을 위해 `ref`를 제공합니다. 이는 할당 방식을\n" |
| "// 수정하여 요소에 대한 참조가 생성되도록 하며, 이 참조가 할당됩니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:41 |
| msgid "" |
| "// Accordingly, by defining 2 values without references, references\n" |
| " // can be retrieved via `ref` and `ref mut`.\n" |
| msgstr "" |
| "// 따라서, 참조가 없는 두 값을 정의함으로써, `ref`와 `ref mut`를 통해 참조를 " |
| "가져올 수 있습니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:46 |
| msgid "// Use `ref` keyword to create a reference.\n" |
| msgstr "// 참조를 생성하려면 `ref` 키워드를 사용합니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:48 |
| msgid "\"Got a reference to a value: {:?}\"" |
| msgstr "\"값에 대한 참조를 얻었습니다: {:?}\"" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:51 |
| msgid "// Use `ref mut` similarly.\n" |
| msgstr "// `ref mut`도 비슷하게 사용합니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:54 |
| msgid "" |
| "// Got a reference. Gotta dereference it before we can\n" |
| " // add anything to it.\n" |
| msgstr "" |
| "// 참조를 얻었습니다. 여기에 무언가를 더하기 전에\n" |
| "// 역참조를 해야 합니다.\n" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:57 |
| msgid "\"We added 10. `mut_value`: {:?}\"" |
| msgstr "\"10을 더했습니다. `mut_value`: {:?}\"" |
| |
| #: src/flow_control/match/destructuring/destructure_pointers.md:65 |
| msgid "[The ref pattern](../../../scope/borrow/ref.md)" |
| msgstr "[ref 패턴](../../../scope/borrow/ref.md)" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:3 |
| msgid "Similarly, a `struct` can be destructured as shown:" |
| msgstr "마찬가지로, `struct`는 다음과 같이 구조 분해될 수 있습니다:" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:12 |
| msgid "// Try changing the values in the struct to see what happens\n" |
| msgstr "// 구조체의 값을 변경하여 어떤 일이 일어나는지 확인해 보세요\n" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:16 |
| msgid "\"First of x is 1, b = {}, y = {} \"" |
| msgstr "\"x의 첫 번째는 1이고, b = {}, y = {} 입니다\"" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:18 |
| msgid "" |
| "// you can destructure structs and rename the variables,\n" |
| " // the order is not important\n" |
| msgstr "" |
| "// 구조체를 구조 분해하고 변수 이름을 바꿀 수 있으며, 순서는 중요하지 않습니" |
| "다\n" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:20 |
| msgid "\"y is 2, i = {:?}\"" |
| msgstr "\"y는 2이고, i = {:?}입니다\"" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:22 |
| msgid "// and you can also ignore some variables:\n" |
| msgstr "// 그리고 일부 변수를 무시할 수도 있습니다:\n" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:23 |
| msgid "\"y = {}, we don't care about x\"" |
| msgstr "\"y = {}이며, x는 신경 쓰지 않습니다\"" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:24 |
| msgid "" |
| "// this will give an error: pattern does not mention field `x`\n" |
| " //Foo { y } => println!(\"y = {}\", y),\n" |
| msgstr "" |
| "// 이것은 에러를 발생시킵니다: 패턴에 `x` 필드가 언급되지 않았습니다\n" |
| "//Foo { y } => println!(\"y = {}\", y),\n" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:30 |
| msgid "// You do not need a match block to destructure structs:\n" |
| msgstr "" |
| "// 구조체를 구조 분해하기 위해 반드시 match 블록이 필요한 것은 아닙니다:\n" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:32 |
| msgid "\"Outside: x0 = {x0:?}, y0 = {y0}\"" |
| msgstr "\"외부: x0 = {x0:?}, y0 = {y0}\"" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:34 |
| msgid "// Destructuring works with nested structs as well:\n" |
| msgstr "// 구조 분해는 중첩된 구조체에서도 작동합니다:\n" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:41 |
| msgid "\"Nested: nested_x = {nested_x:?}, nested_y = {nested_y:?}\"" |
| msgstr "\"중첩됨: nested_x = {nested_x:?}, nested_y = {nested_y:?}\"" |
| |
| #: src/flow_control/match/destructuring/destructure_structures.md:47 |
| msgid "[Structs](../../../custom_types/structs.md)" |
| msgstr "[구조체](../../../custom_types/structs.md)" |
| |
| #: src/flow_control/match/guard.md:3 |
| msgid "A `match` _guard_ can be added to filter the arm." |
| msgstr "" |
| "매치 팔(arm)을 필터링하기 위해 `match` _가드(guard)_를 추가할 수 있습니다." |
| |
| #: src/flow_control/match/guard.md:14 |
| msgid "// ^ TODO try different values for `temperature`\n" |
| msgstr "// ^ TODO `temperature`에 다른 값을 시도해 보세요\n" |
| |
| #: src/flow_control/match/guard.md:17 |
| msgid "\"{}C is above 30 Celsius\"" |
| msgstr "\"{}C는 섭씨 30도 초과입니다\"" |
| |
| #: src/flow_control/match/guard.md:18 |
| msgid "// The `if condition` part ^ is a guard\n" |
| msgstr "// `if 조건` 부분 ^ 이 가드입니다\n" |
| |
| #: src/flow_control/match/guard.md:19 |
| msgid "\"{}C is equal to or below 30 Celsius\"" |
| msgstr "\"{}C는 섭씨 30도 이하입니다\"" |
| |
| #: src/flow_control/match/guard.md:21 |
| msgid "\"{}F is above 86 Fahrenheit\"" |
| msgstr "\"{}F는 화씨 86도 초과입니다\"" |
| |
| #: src/flow_control/match/guard.md:22 |
| msgid "\"{}F is equal to or below 86 Fahrenheit\"" |
| msgstr "\"{}F는 화씨 86도 이하입니다\"" |
| |
| #: src/flow_control/match/guard.md:27 |
| msgid "" |
| "Note that the compiler won't take guard conditions into account when " |
| "checking if all patterns are covered by the match expression." |
| msgstr "" |
| "컴파일러는 매치 표현식이 모든 패턴을 다루고 있는지 확인할 때 가드 조건을 고려" |
| "하지 않는다는 점에 유의하세요." |
| |
| #: src/flow_control/match/guard.md:35 |
| msgid "\"Zero\"" |
| msgstr "\"0\"" |
| |
| #: src/flow_control/match/guard.md:36 |
| msgid "\"Greater than zero\"" |
| msgstr "\"0보다 큼\"" |
| |
| #: src/flow_control/match/guard.md:37 |
| msgid "" |
| "// _ => unreachable!(\"Should never happen.\"),\n" |
| " // TODO ^ uncomment to fix compilation\n" |
| msgstr "" |
| "// _ => unreachable!(\"절대 일어날 수 없는 일입니다.\"),\n" |
| "// TODO ^ 컴파일을 수정하려면 주석을 해제하세요\n" |
| |
| #: src/flow_control/match/guard.md:45 |
| msgid "" |
| "[Tuples](../../primitives/tuples.md) [Enums](../../custom_types/enum.md)" |
| msgstr "" |
| "[튜플](../../primitives/tuples.md) [열거형](../../custom_types/enum.md)" |
| |
| #: src/flow_control/match/binding.md:3 |
| msgid "" |
| "Indirectly accessing a variable makes it impossible to branch and use that " |
| "variable without re-binding. `match` provides the `@` sigil for binding " |
| "values to names:" |
| msgstr "" |
| "변수에 간접적으로 접근하면 재바인딩 없이 해당 변수를 분기하고 사용하는 것이 " |
| "불가능합니다. `match`는 값을 이름에 바인딩하기 위한 `@` 기호를 제공합니다:" |
| |
| #: src/flow_control/match/binding.md:8 |
| msgid "// A function `age` which returns a `u32`.\n" |
| msgstr "// `u32`를 반환하는 `age` 함수.\n" |
| |
| #: src/flow_control/match/binding.md:14 |
| msgid "\"Tell me what type of person you are\"" |
| msgstr "\"당신이 어떤 종류의 사람인지 말해주세요\"" |
| |
| #: src/flow_control/match/binding.md:17 |
| msgid "\"I haven't celebrated my first birthday yet\"" |
| msgstr "\"아직 첫 번째 생일을 맞이하지 않았습니다\"" |
| |
| #: src/flow_control/match/binding.md:18 |
| msgid "" |
| "// Could `match` 1 ..= 12 directly but then what age\n" |
| " // would the child be?\n" |
| " // Could `match` n and use an `if` guard, but would\n" |
| " // not contribute to exhaustiveness checks.\n" |
| " // (Although in this case that would not matter since\n" |
| " // a \"catch-all\" pattern is present at the bottom)\n" |
| " // Instead, bind to `n` for the sequence of 1 ..= 12.\n" |
| " // Now the age can be reported.\n" |
| msgstr "" |
| "// 1 ..= 12를 직접 `match`할 수 있지만, 그러면\n" |
| "// 아이의 나이가 몇 살인지 알 수 있을까요?\n" |
| "// n을 `match`하고 `if` 가드를 사용할 수 있지만,\n" |
| "// 이는 철저함(exhaustiveness) 검사에 기여하지 않습니다.\n" |
| "// (비록 이 경우에는 하단에 \"catch-all\" 패턴이 있어 상관없지만요)\n" |
| "// 대신, 1 ..= 12 시퀀스에 대해 `n`에 바인딩합니다.\n" |
| "// 이제 나이를 보고할 수 있습니다.\n" |
| |
| #: src/flow_control/match/binding.md:26 |
| msgid "\"I'm a child of age {:?}\"" |
| msgstr "\"저는 {:?}살인 어린이입니다\"" |
| |
| #: src/flow_control/match/binding.md:27 src/flow_control/match/binding.md:29 |
| msgid "\"I'm a teen of age {:?}\"" |
| msgstr "\"저는 {:?}살인 청소년입니다\"" |
| |
| #: src/flow_control/match/binding.md:28 |
| msgid "// A similar binding can be done when matching several values.\n" |
| msgstr "// 여러 값을 매칭할 때도 유사한 바인딩을 수행할 수 있습니다.\n" |
| |
| #: src/flow_control/match/binding.md:30 |
| msgid "// Nothing bound. Return the result.\n" |
| msgstr "// 바인딩된 것이 없습니다. 결과를 반환합니다.\n" |
| |
| #: src/flow_control/match/binding.md:31 |
| msgid "\"I'm an old person of age {:?}\"" |
| msgstr "\"저는 {:?}살인 어르신입니다\"" |
| |
| #: src/flow_control/match/binding.md:36 |
| msgid "" |
| "You can also use binding to \"destructure\" `enum` variants, such as " |
| "`Option`:" |
| msgstr "" |
| "또한 `Option`과 같은 `enum` 변체를 \"구조 분해\"하기 위해 바인딩을 사용할 수 " |
| "있습니다:" |
| |
| #: src/flow_control/match/binding.md:45 |
| msgid "" |
| "// Got `Some` variant, match if its value, bound to `n`,\n" |
| " // is equal to 42.\n" |
| " // Could also use `Some(42)` and print `\"The Answer: 42!\"`\n" |
| " // but that would require changing `42` in 2 spots should\n" |
| " // you ever wish to change it.\n" |
| " // Could also use `Some(n) if n == 42` and print `\"The Answer: {n}!" |
| "\"`\n" |
| " // but that would not contribute to exhaustiveness checks.\n" |
| " // (Although in this case that would not matter since\n" |
| " // the next arm is a \"catch-all\" pattern)\n" |
| msgstr "" |
| "// `Some` 변체를 얻었을 때, `n`에 바인딩된 그 값이\n" |
| "// 42와 같은지 매칭합니다.\n" |
| "// `Some(42)`를 사용하여 `\"정답: 42!\"`를 출력할 수도 있지만,\n" |
| "// 그러면 나중에 값을 바꾸고 싶을 때 두 군데를 수정해야 합니다.\n" |
| "// `Some(n) if n == 42`를 사용하여 `\"정답: {n}!\"`를 출력할 수도 있지만,\n" |
| "// 이는 철저함 검사에 기여하지 않습니다.\n" |
| "// (비록 이 경우에는 다음 팔이 \"catch-all\" 패턴이라 상관없지만요)\n" |
| |
| #: src/flow_control/match/binding.md:54 |
| msgid "\"The Answer: {}!\"" |
| msgstr "\"정답: {}!\"" |
| |
| #: src/flow_control/match/binding.md:55 |
| msgid "// Match any other number.\n" |
| msgstr "// 다른 모든 숫자 매칭.\n" |
| |
| #: src/flow_control/match/binding.md:56 |
| msgid "\"Not interesting... {}\"" |
| msgstr "\"흥미롭지 않네요... {}\"" |
| |
| #: src/flow_control/match/binding.md:57 |
| msgid "// Match anything else (`None` variant).\n" |
| msgstr "// 그 외의 모든 경우(`None` 변체) 매칭.\n" |
| |
| #: src/flow_control/match/binding.md:65 |
| msgid "" |
| "[`functions`](../../fn.md), [`enums`](../../custom_types/enum.md) and " |
| "[`Option`](../../std/option.md)" |
| msgstr "" |
| "[`함수`](../../fn.md), [`열거형`](../../custom_types/enum.md) 그리고 " |
| "[`Option`](../../std/option.md)" |
| |
| #: src/flow_control/if_let.md:3 |
| msgid "" |
| "For some use cases, when matching enums, `match` is awkward. For example:" |
| msgstr "" |
| "어떤 경우에는 열거형을 매칭할 때 `match`가 어색할 수 있습니다. 예를 들어:" |
| |
| #: src/flow_control/if_let.md:6 src/flow_control/while_let.md:7 |
| #: src/flow_control/while_let.md:35 |
| msgid "// Make `optional` of type `Option<i32>`\n" |
| msgstr "// `Option<i32>` 타입의 `optional` 생성\n" |
| |
| #: src/flow_control/if_let.md:10 |
| msgid "\"This is a really long string and `{:?}`\"" |
| msgstr "\"이것은 정말 긴 문자열이며 `{:?}`입니다\"" |
| |
| #: src/flow_control/if_let.md:12 |
| msgid "" |
| "// ^ Required because `match` is exhaustive. Doesn't it seem\n" |
| " // like wasted space?\n" |
| msgstr "" |
| "// ^ `match`는 철저해야(exhaustive) 하기 때문에 필요합니다. 공간 낭비처럼\n" |
| "// 보이진 않나요?\n" |
| |
| #: src/flow_control/if_let.md:18 |
| msgid "" |
| "`if let` is cleaner for this use case and in addition allows various failure " |
| "options to be specified:" |
| msgstr "" |
| "이런 경우 `if let`이 더 깔끔하며, 추가로 다양한 실패 옵션을 지정할 수 있습니" |
| "다:" |
| |
| #: src/flow_control/if_let.md:23 |
| msgid "// All have type `Option<i32>`\n" |
| msgstr "// 모두 `Option<i32>` 타입입니다\n" |
| |
| #: src/flow_control/if_let.md:28 |
| msgid "" |
| "// The `if let` construct reads: \"if `let` destructures `number` into\n" |
| " // `Some(i)`, evaluate the block (`{}`).\n" |
| msgstr "" |
| "// `if let` 구문은 다음과 같이 읽힙니다: \"만약 `let`이 `number`를\n" |
| "// `Some(i)`로 구조 분해한다면, 블록(`{}`)을 실행하라.\"\n" |
| |
| #: src/flow_control/if_let.md:31 src/flow_control/if_let.md:36 |
| #: src/flow_control/if_let.md:46 |
| msgid "\"Matched {:?}!\"" |
| msgstr "\"{:?}가 매칭되었습니다!\"" |
| |
| #: src/flow_control/if_let.md:34 |
| msgid "// If you need to specify a failure, use an else:\n" |
| msgstr "// 실패한 경우를 지정해야 한다면, else를 사용하세요:\n" |
| |
| #: src/flow_control/if_let.md:38 |
| msgid "// Destructure failed. Change to the failure case.\n" |
| msgstr "// 구조 분해에 실패했습니다. 실패 사례로 전환합니다.\n" |
| |
| #: src/flow_control/if_let.md:39 src/flow_control/if_let.md:50 |
| msgid "\"Didn't match a number. Let's go with a letter!\"" |
| msgstr "\"숫자와 매칭되지 않았습니다. 문자로 해봅시다!\"" |
| |
| #: src/flow_control/if_let.md:42 |
| msgid "// Provide an altered failing condition.\n" |
| msgstr "// 변경된 실패 조건을 제공합니다.\n" |
| |
| #: src/flow_control/if_let.md:47 |
| msgid "" |
| "// Destructure failed. Evaluate an `else if` condition to see if the\n" |
| " // alternate failure branch should be taken:\n" |
| msgstr "" |
| "// 구조 분해에 실패했습니다. 다른 실패 분기를 타야 하는지\n" |
| "// `else if` 조건을 평가합니다:\n" |
| |
| #: src/flow_control/if_let.md:52 |
| msgid "// The condition evaluated false. This branch is the default:\n" |
| msgstr "// 조건이 거짓(false)으로 평가되었습니다. 이 분기가 기본입니다:\n" |
| |
| #: src/flow_control/if_let.md:53 |
| msgid "\"I don't like letters. Let's go with an emoticon :)!\"" |
| msgstr "\"문자는 별로예요. 이모티콘 :)으로 가봅시다!\"" |
| |
| #: src/flow_control/if_let.md:58 |
| msgid "In the same way, `if let` can be used to match any enum value:" |
| msgstr "" |
| "같은 방식으로, `if let`은 모든 열거형 값을 매칭하는 데 사용될 수 있습니다:" |
| |
| #: src/flow_control/if_let.md:61 |
| msgid "// Our example enum\n" |
| msgstr "// 예제 열거형\n" |
| |
| #: src/flow_control/if_let.md:69 |
| msgid "// Create example variables\n" |
| msgstr "// 예제 변수 생성\n" |
| |
| #: src/flow_control/if_let.md:74 src/flow_control/if_let.md:110 |
| msgid "// Variable a matches Foo::Bar\n" |
| msgstr "// 변수 a는 Foo::Bar와 매칭됩니다\n" |
| |
| #: src/flow_control/if_let.md:76 src/flow_control/if_let.md:113 |
| msgid "\"a is foobar\"" |
| msgstr "\"a는 foobar입니다\"" |
| |
| #: src/flow_control/if_let.md:79 |
| msgid "" |
| "// Variable b does not match Foo::Bar\n" |
| " // So this will print nothing\n" |
| msgstr "" |
| "// 변수 b는 Foo::Bar와 매칭되지 않습니다\n" |
| "// 따라서 아무것도 출력되지 않습니다\n" |
| |
| #: src/flow_control/if_let.md:82 |
| msgid "\"b is foobar\"" |
| msgstr "\"b는 foobar입니다\"" |
| |
| #: src/flow_control/if_let.md:85 |
| msgid "" |
| "// Variable c matches Foo::Qux which has a value\n" |
| " // Similar to Some() in the previous example\n" |
| msgstr "" |
| "// 변수 c는 값을 가진 Foo::Qux와 매칭됩니다\n" |
| "// 앞선 예제의 Some()과 유사합니다\n" |
| |
| #: src/flow_control/if_let.md:88 |
| msgid "\"c is {}\"" |
| msgstr "\"c는 {}입니다\"" |
| |
| #: src/flow_control/if_let.md:91 |
| msgid "// Binding also works with `if let`\n" |
| msgstr "// 바인딩은 `if let`에서도 작동합니다\n" |
| |
| #: src/flow_control/if_let.md:93 |
| msgid "\"c is one hundred\"" |
| msgstr "\"c는 100입니다\"" |
| |
| #: src/flow_control/if_let.md:98 |
| msgid "" |
| "Another benefit is that `if let` allows us to match non-parameterized enum " |
| "variants. This is true even in cases where the enum doesn't implement or " |
| "derive `PartialEq`. In such cases `if Foo::Bar == a` would fail to compile, " |
| "because instances of the enum cannot be equated, however `if let` will " |
| "continue to work." |
| msgstr "" |
| "또 다른 장점은 `if let`을 사용하면 파라미터가 없는 열거형 변체도 매칭할 수 있" |
| "다는 점입니다. 이는 열거형이 `PartialEq`를 구현하거나 유도하지 않는 경우에도 " |
| "마찬가지입니다. 이러한 경우 `if Foo::Bar == a`는 열거형 인스턴스를 비교할 수 " |
| "없기 때문에 컴파일에 실패하지만, `if let`은 계속 작동합니다." |
| |
| #: src/flow_control/if_let.md:100 |
| msgid "Would you like a challenge? Fix the following example to use `if let`:" |
| msgstr "도전해 보시겠습니까? 다음 예제를 `if let`을 사용하도록 수정해 보세요:" |
| |
| #: src/flow_control/if_let.md:103 |
| msgid "" |
| "// This enum purposely neither implements nor derives PartialEq.\n" |
| "// That is why comparing Foo::Bar == a fails below.\n" |
| msgstr "" |
| "// 이 열거형은 의도적으로 PartialEq를 구현하거나 유도(derive)하지 않았습니" |
| "다.\n" |
| "// 그래서 아래에서 Foo::Bar == a 를 비교하는 것이 실패합니다.\n" |
| |
| #: src/flow_control/if_let.md:112 |
| msgid "// ^-- this causes a compile-time error. Use `if let` instead.\n" |
| msgstr "" |
| "// ^-- 이것은 컴파일 타임 에러를 발생시킵니다. 대신 `if let`을 사용하세요.\n" |
| |
| #: src/flow_control/if_let.md:120 |
| msgid "" |
| "[`enum`](../custom_types/enum.md), [`Option`](../std/option.md), and the " |
| "[RFC](https://github.com/rust-lang/rfcs/pull/160)" |
| msgstr "" |
| "[`enum`](../custom_types/enum.md), [`Option`](../std/option.md), 그리고 [RFC]" |
| "(https://github.com/rust-lang/rfcs/pull/160)" |
| |
| #: src/flow_control/let_else.md:3 |
| msgid "🛈 stable since: rust 1.65" |
| msgstr "🛈 안정화 버전: rust 1.65" |
| |
| #: src/flow_control/let_else.md:5 |
| msgid "" |
| "🛈 you can target specific edition by compiling like this `rustc --" |
| "edition=2021 main.rs`" |
| msgstr "" |
| "🛈 다음과 같이 컴파일하여 특정 에디션을 타겟팅할 수 있습니다: `rustc --" |
| "edition=2021 main.rs`" |
| |
| #: src/flow_control/let_else.md:8 |
| msgid "" |
| "With `let`\\-`else`, a refutable pattern can match and bind variables in the " |
| "surrounding scope like a normal `let`, or else diverge (e.g. `break`, " |
| "`return`, `panic!`) when the pattern doesn't match." |
| msgstr "" |
| "`let`\\-`else`를 사용하면, 일반적인 `let`처럼 주변 스코프에서 변수를 매칭하" |
| "고 바인딩할 수 있으며, 패턴이 매칭되지 않을 경우 분기(예: `break`, `return`, " |
| "`panic!`)할 수 있습니다." |
| |
| #: src/flow_control/let_else.md:16 src/flow_control/let_else.md:39 |
| #: src/std/str.md:41 |
| msgid "' '" |
| msgstr "' '" |
| |
| #: src/flow_control/let_else.md:18 src/flow_control/let_else.md:42 |
| msgid "\"Can't segment count item pair: '{s}'\"" |
| msgstr "\"카운트 아이템 쌍을 분리할 수 없습니다: '{s}'\"" |
| |
| #: src/flow_control/let_else.md:21 src/flow_control/let_else.md:47 |
| msgid "\"Can't parse integer: '{count_str}'\"" |
| msgstr "\"정수를 파싱할 수 없습니다: '{count_str}'\"" |
| |
| #: src/flow_control/let_else.md:27 src/flow_control/let_else.md:52 |
| msgid "\"3 chairs\"" |
| msgstr "\"3 chairs\"" |
| |
| #: src/flow_control/let_else.md:27 src/flow_control/let_else.md:52 |
| msgid "\"chairs\"" |
| msgstr "\"chairs\"" |
| |
| #: src/flow_control/let_else.md:31 |
| msgid "" |
| "The scope of name bindings is the main thing that makes this different from " |
| "`match` or `if let`\\-`else` expressions. You could previously approximate " |
| "these patterns with an unfortunate bit of repetition and an outer `let`:" |
| msgstr "" |
| "이름 바인딩의 스코프는 이것이 `match`나 `if let`\\-`else` 표현식과 다른 주요 " |
| "점입니다. 이전에는 외부 `let`과 약간의 반복을 통해 이러한 패턴을 흉내 낼 수 " |
| "있었습니다:" |
| |
| #: src/flow_control/let_else.md:57 |
| msgid "" |
| "[option](../std/option.md), [match](./match.md), [if let](./if_let.md) and " |
| "the [let-else RFC](https://rust-lang.github.io/rfcs/3137-let-else.html)." |
| msgstr "" |
| "[option](../std/option.md), [match](./match.md), [if let](./if_let.md) 그리" |
| "고 [let-else RFC](https://rust-lang.github.io/rfcs/3137-let-else.html)." |
| |
| #: src/flow_control/while_let.md:3 |
| msgid "" |
| "Similar to `if let`, `while let` can make awkward `match` sequences more " |
| "tolerable. Consider the following sequence that increments `i`:" |
| msgstr "" |
| "`if let`과 유사하게, `while let`은 어색한 `match` 시퀀스를 더 견딜만하게 만들" |
| "어 줍니다. `i`를 증가시키는 다음 시퀀스를 고려해 보세요:" |
| |
| #: src/flow_control/while_let.md:9 |
| msgid "// Repeatedly try this test.\n" |
| msgstr "// 이 테스트를 반복해서 시도합니다.\n" |
| |
| #: src/flow_control/while_let.md:13 |
| msgid "// If `optional` destructures, evaluate the block.\n" |
| msgstr "// 만약 `optional`이 구조 분해된다면, 블록을 평가합니다.\n" |
| |
| #: src/flow_control/while_let.md:16 src/flow_control/while_let.md:42 |
| msgid "\"Greater than 9, quit!\"" |
| msgstr "\"9보다 큽니다, 종료!\"" |
| |
| #: src/flow_control/while_let.md:19 src/flow_control/while_let.md:45 |
| msgid "\"`i` is `{:?}`. Try again.\"" |
| msgstr "\"`i`는 `{:?}`입니다. 다시 시도하세요.\"" |
| |
| #: src/flow_control/while_let.md:22 |
| msgid "// ^ Requires 3 indentations!\n" |
| msgstr "// ^ 3단계의 들여쓰기가 필요합니다!\n" |
| |
| #: src/flow_control/while_let.md:24 |
| msgid "// Quit the loop when the destructure fails:\n" |
| msgstr "// 구조 분해에 실패하면 루프를 종료합니다:\n" |
| |
| #: src/flow_control/while_let.md:26 |
| msgid "// ^ Why should this be required? There must be a better way!\n" |
| msgstr "// ^ 왜 이것이 필요할까요? 분명 더 좋은 방법이 있을 것입니다!\n" |
| |
| #: src/flow_control/while_let.md:31 |
| msgid "Using `while let` makes this sequence much nicer:" |
| msgstr "`while let`을 사용하면 이 시퀀스가 훨씬 깔끔해집니다:" |
| |
| #: src/flow_control/while_let.md:38 |
| msgid "" |
| "// This reads: \"while `let` destructures `optional` into\n" |
| " // `Some(i)`, evaluate the block (`{}`). Else `break`.\n" |
| msgstr "" |
| "// 다음과 같이 읽힙니다: \"`let`이 `optional`을 `Some(i)`로\n" |
| "// 구조 분해하는 동안, 블록(`{}`)을 실행하라. 그 외에는 `break` 하라.\"\n" |
| |
| #: src/flow_control/while_let.md:48 |
| msgid "" |
| "// ^ Less rightward drift and doesn't require\n" |
| " // explicitly handling the failing case.\n" |
| msgstr "" |
| "// ^ 오른쪽으로의 들여쓰기가 줄어들었으며 실패 사례를\n" |
| "// 명시적으로 처리할 필요가 없습니다.\n" |
| |
| #: src/flow_control/while_let.md:51 |
| msgid "" |
| "// ^ `if let` had additional optional `else`/`else if`\n" |
| " // clauses. `while let` does not have these.\n" |
| msgstr "" |
| "// ^ `if let`에는 추가적인 선택 사항인 `else`/`else if` 절이\n" |
| "// 있었지만, `while let`에는 이러한 것들이 없습니다.\n" |
| |
| #: src/flow_control/while_let.md:58 |
| msgid "" |
| "[`enum`](../custom_types/enum.md), [`Option`](../std/option.md), and the " |
| "[RFC](https://github.com/rust-lang/rfcs/pull/214)" |
| msgstr "" |
| "[`enum`](../custom_types/enum.md), [`Option`](../std/option.md), 그리고 [RFC]" |
| "(https://github.com/rust-lang/rfcs/pull/214)" |
| |
| #: src/fn.md:3 |
| msgid "" |
| "Functions are declared using the `fn` keyword. Its arguments are type " |
| "annotated, just like variables, and, if the function returns a value, the " |
| "return type must be specified after an arrow `->`." |
| msgstr "" |
| "함수는 `fn` 키워드를 사용하여 선언됩니다. 인자는 변수와 마찬가지로 타입 어노" |
| "테이션이 필요하며, 함수가 값을 반환하는 경우 반환 타입은 화살표 `->` 뒤에 지" |
| "정해야 합니다." |
| |
| #: src/fn.md:7 |
| msgid "" |
| "The final expression in the function will be used as return value. " |
| "Alternatively, the `return` statement can be used to return a value earlier " |
| "from within the function, even from inside loops or `if` statements." |
| msgstr "" |
| "함수의 마지막 표현식은 반환 값으로 사용됩니다. 또는 `return` 문을 사용하여 루" |
| "프나 `if` 문 내부를 포함하여 함수 내에서 더 일찍 값을 반환할 수 있습니다." |
| |
| #: src/fn.md:11 |
| msgid "Let's rewrite FizzBuzz using functions!" |
| msgstr "함수를 사용하여 FizzBuzz를 다시 작성해 봅시다!" |
| |
| #: src/fn.md:14 |
| msgid "" |
| "// Unlike C/C++, there's no restriction on the order of function " |
| "definitions\n" |
| msgstr "// C/C++와 달리, 함수 정의 순서에는 제한이 없습니다.\n" |
| |
| #: src/fn.md:16 |
| msgid "// We can use this function here, and define it somewhere later\n" |
| msgstr "// 여기서 이 함수를 사용하고, 나중에 어딘가에서 정의할 수 있습니다.\n" |
| |
| #: src/fn.md:19 |
| msgid "// Function that returns a boolean value\n" |
| msgstr "// 불리언 값을 반환하는 함수\n" |
| |
| #: src/fn.md:22 |
| msgid "// Corner case, early return\n" |
| msgstr "// 예외 케이스, 조기 반환\n" |
| |
| #: src/fn.md:27 |
| msgid "// This is an expression, the `return` keyword is not necessary here\n" |
| msgstr "// 이것은 표현식이며, 여기서는 `return` 키워드가 필요하지 않습니다.\n" |
| |
| #: src/fn.md:30 |
| msgid "" |
| "// Functions that \"don't\" return a value, actually return the unit type " |
| "`()`\n" |
| msgstr "" |
| "// 값을 반환하지 \"않는\" 함수는 실제로는 유닛 타입 `()`를 반환합니다.\n" |
| |
| #: src/fn.md:43 |
| msgid "" |
| "// When a function returns `()`, the return type can be omitted from the\n" |
| "// signature\n" |
| msgstr "" |
| "// 함수가 `()`를 반환할 때, 시그니처에서 반환 타입을 생략할 수 있습니다.\n" |
| |
| #: src/fn/methods.md:1 |
| msgid "Associated functions & Methods" |
| msgstr "연관 함수와 메서드" |
| |
| #: src/fn/methods.md:3 |
| msgid "" |
| "Some functions are connected to a particular type. These come in two forms: " |
| "associated functions, and methods. Associated functions are functions that " |
| "are defined on a type generally, while methods are associated functions that " |
| "are called on a particular instance of a type." |
| msgstr "" |
| "일부 함수는 특정 타입과 연결되어 있습니다. 이들은 연관 함수와 메서드라는 두 " |
| "가지 형태로 제공됩니다. 연관 함수는 일반적으로 타입 상에 정의된 함수인 반면, " |
| "메서드는 특정 타입의 인스턴스에서 호출되는 연관 함수입니다." |
| |
| #: src/fn/methods.md:13 |
| msgid "" |
| "// Implementation block, all `Point` associated functions & methods go in " |
| "here\n" |
| msgstr "" |
| "// 구현(Implementation) 블록으로, 모든 `Point` 연관 함수와 메서드가 여기에 들" |
| "어갑니다.\n" |
| |
| #: src/fn/methods.md:16 |
| msgid "" |
| "// This is an \"associated function\" because this function is associated " |
| "with\n" |
| " // a particular type, that is, Point.\n" |
| " //\n" |
| " // Associated functions don't need to be called with an instance.\n" |
| " // These functions are generally used like constructors.\n" |
| msgstr "" |
| "// 이것은 이 함수가 특정 타입인 Point와 연관되어 있기 때문에\n" |
| "// \"연관 함수\"라고 불립니다.\n" |
| "//\n" |
| "// 연관 함수는 인스턴스를 통해 호출될 필요가 없습니다.\n" |
| "// 이러한 함수들은 일반적으로 생성자처럼 사용됩니다.\n" |
| |
| #: src/fn/methods.md:25 |
| msgid "// Another associated function, taking two arguments:\n" |
| msgstr "// 두 개의 인자를 받는 또 다른 연관 함수:\n" |
| |
| #: src/fn/methods.md:37 |
| msgid "" |
| "// This is a method\n" |
| " // `&self` is sugar for `self: &Self`, where `Self` is the type of the\n" |
| " // caller object. In this case `Self` = `Rectangle`\n" |
| msgstr "" |
| "// 이것은 메서드입니다\n" |
| "// `&self`는 `self: &Self`를 줄여 쓴 것인데, 여기서 `Self`는\n" |
| "// 호출 객체의 타입을 의미합니다. 이 경우 `Self` = `Rectangle`입니다.\n" |
| |
| #: src/fn/methods.md:41 |
| msgid "// `self` gives access to the struct fields via the dot operator\n" |
| msgstr "" |
| "// `self`는 점(dot) 연산자를 통해 구조체 필드에 대한 접근을 제공합니다.\n" |
| |
| #: src/fn/methods.md:45 |
| msgid "" |
| "// `abs` is a `f64` method that returns the absolute value of the\n" |
| " // caller\n" |
| msgstr "// `abs`는 호출자의 절댓값을 반환하는 `f64` 메서드입니다.\n" |
| |
| #: src/fn/methods.md:57 |
| msgid "" |
| "// This method requires the caller object to be mutable\n" |
| " // `&mut self` desugars to `self: &mut Self`\n" |
| msgstr "" |
| "// 이 메서드는 호출 객체가 가변적일 것을 요구합니다\n" |
| "// `&mut self`는 `self: &mut Self`로 풀어서 쓸 수 있습니다.\n" |
| |
| #: src/fn/methods.md:67 |
| msgid "// `Pair` owns resources: two heap allocated integers\n" |
| msgstr "// `Pair`는 리소스를 소유합니다: 힙에 할당된 두 개의 정수\n" |
| |
| #: src/fn/methods.md:72 |
| msgid "" |
| "// This method \"consumes\" the resources of the caller object\n" |
| " // `self` desugars to `self: Self`\n" |
| msgstr "" |
| "// 이 메서드는 호출 객체의 리소스를 \"소비\"합니다\n" |
| "// `self`는 `self: Self`로 풀어서 쓸 수 있습니다.\n" |
| |
| #: src/fn/methods.md:75 |
| msgid "// Destructure `self`\n" |
| msgstr "// `self` 구조 분해\n" |
| |
| #: src/fn/methods.md:78 |
| msgid "\"Destroying Pair({}, {})\"" |
| msgstr "\"Pair({}, {}) 파괴 중\"" |
| |
| #: src/fn/methods.md:80 |
| msgid "// `first` and `second` go out of scope and get freed\n" |
| msgstr "// `first`와 `second`는 스코프를 벗어나며 해제됩니다.\n" |
| |
| #: src/fn/methods.md:86 |
| msgid "// Associated functions are called using double colons\n" |
| msgstr "// 연관 함수는 이중 콜론을 사용하여 호출됩니다.\n" |
| |
| #: src/fn/methods.md:91 |
| msgid "" |
| "// Methods are called using the dot operator\n" |
| " // Note that the first argument `&self` is implicitly passed, i.e.\n" |
| " // `rectangle.perimeter()` === `Rectangle::perimeter(&rectangle)`\n" |
| msgstr "" |
| "// 메서드는 점 연산자를 사용하여 호출됩니다.\n" |
| "// 첫 번째 인자인 `&self`는 암시적으로 전달됩니다. 즉,\n" |
| "// `rectangle.perimeter()`는 `Rectangle::perimeter(&rectangle)`와 동일합니" |
| "다.\n" |
| |
| #: src/fn/methods.md:94 |
| msgid "\"Rectangle perimeter: {}\"" |
| msgstr "\"사각형 둘레: {}\"" |
| |
| #: src/fn/methods.md:95 |
| msgid "\"Rectangle area: {}\"" |
| msgstr "\"사각형 넓이: {}\"" |
| |
| #: src/fn/methods.md:102 |
| msgid "" |
| "// Error! `rectangle` is immutable, but this method requires a mutable\n" |
| " // object\n" |
| " //rectangle.translate(1.0, 0.0);\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! `rectangle`은 불변이지만, 이 메서드는 가변 객체를 요구합니다.\n" |
| "// rectangle.translate(1.0, 0.0);\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/fn/methods.md:107 |
| msgid "// Okay! Mutable objects can call mutable methods\n" |
| msgstr "// 좋습니다! 가변 객체는 가변 메서드를 호출할 수 있습니다\n" |
| |
| #: src/fn/methods.md:114 |
| msgid "" |
| "// Error! Previous `destroy` call \"consumed\" `pair`\n" |
| " //pair.destroy();\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! 이전의 `destroy` 호출이 `pair`를 \"소비\"했습니다\n" |
| "// pair.destroy();\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/fn/closures.md:3 |
| msgid "" |
| "Closures are functions that can capture the enclosing environment. For " |
| "example, a closure that captures the `x` variable:" |
| msgstr "" |
| "클로저는 감싸고 있는 환경을 캡처할 수 있는 함수입니다. 예를 들어, `x` 변수를 " |
| "캡처하는 클로저는 다음과 같습니다:" |
| |
| #: src/fn/closures.md:10 |
| msgid "" |
| "The syntax and capabilities of closures make them very convenient for on the " |
| "fly usage. Calling a closure is exactly like calling a function. However, " |
| "both input and return types _can_ be inferred and input variable names " |
| "_must_ be specified." |
| msgstr "" |
| "클로저의 구문과 기능은 즉석에서 사용하기에 매우 편리합니다. 클로저를 호출하" |
| "는 것은 함수를 호출하는 것과 똑같습니다. 하지만 입력 및 반환 타입은 추론될 " |
| "수 있으며, 입력 변수 이름은 반드시 지정되어야 합니다." |
| |
| #: src/fn/closures.md:15 |
| msgid "Other characteristics of closures include:" |
| msgstr "클로저의 다른 특징들은 다음과 같습니다:" |
| |
| #: src/fn/closures.md:17 |
| msgid "using `||` instead of `()` around input variables." |
| msgstr "입력 변수 주위에 `()` 대신 `||`를 사용합니다." |
| |
| #: src/fn/closures.md:18 |
| msgid "" |
| "optional body delimitation (`{}`) for a single line expression (mandatory " |
| "otherwise)." |
| msgstr "" |
| "한 줄 표현식의 경우 본문 구분 기호(`{}`)는 선택 사항입니다 (그 외의 경우는 필" |
| "수)." |
| |
| #: src/fn/closures.md:19 |
| msgid "the ability to capture the outer environment variables." |
| msgstr "외부 환경 변수를 캡처하는 능력." |
| |
| #: src/fn/closures.md:25 |
| msgid "" |
| "// A regular function can't refer to variables in the enclosing environment\n" |
| " //fn function(i: i32) -> i32 { i + outer_var }\n" |
| " // TODO: uncomment the line above and see the compiler error. The " |
| "compiler\n" |
| " // suggests that we define a closure instead.\n" |
| msgstr "" |
| "// 일반 함수는 자신을 감싸고 있는 환경의 변수를 참조할 수 없습니다\n" |
| "// fn function(i: i32) -> i32 { i + outer_var }\n" |
| "// TODO: 위의 줄의 주석을 해제하고 컴파일 에러를 확인해 보세요. 컴파일러는\n" |
| "// 대신 클로저를 정의할 것을 제안합니다.\n" |
| |
| #: src/fn/closures.md:30 |
| msgid "" |
| "// Closures are anonymous, here we are binding them to references.\n" |
| " // Annotation is identical to function annotation but is optional\n" |
| " // as are the `{}` wrapping the body. These nameless functions\n" |
| " // are assigned to appropriately named variables.\n" |
| msgstr "" |
| "// 클로저는 익명이며, 여기서는 참조에 바인딩하고 있습니다.\n" |
| "// 어노테이션은 함수의 어노테이션과 동일하지만 선택 사항이며,\n" |
| "// 본문을 감싸는 `{}` 역시 선택 사항입니다. 이 이름 없는 함수들은\n" |
| "// 적절하게 이름 붙여진 변수들에 할당됩니다.\n" |
| |
| #: src/fn/closures.md:37 |
| msgid "// Call the closures.\n" |
| msgstr "// 클로저를 호출합니다.\n" |
| |
| #: src/fn/closures.md:38 |
| msgid "\"closure_annotated: {}\"" |
| msgstr "\"어노테이션된 클로저: {}\"" |
| |
| #: src/fn/closures.md:39 |
| msgid "\"closure_inferred: {}\"" |
| msgstr "\"추론된 클로저: {}\"" |
| |
| #: src/fn/closures.md:40 |
| msgid "" |
| "// Once closure's type has been inferred, it cannot be inferred again with " |
| "another type.\n" |
| " //println!(\"cannot reuse closure_inferred with another type: {}\", " |
| "closure_inferred(42i64));\n" |
| " // TODO: uncomment the line above and see the compiler error.\n" |
| msgstr "" |
| "// 클로저의 타입이 한 번 추론되면, 다른 타입으로 다시 추론될 수 없습니다.\n" |
| "// println!(\"다른 타입으로 closure_inferred를 재사용할 수 없습니다: {}\", " |
| "closure_inferred(42i64));\n" |
| "// TODO: 위의 줄의 주석을 해제하고 컴파일 에러를 확인해 보세요.\n" |
| |
| #: src/fn/closures.md:44 |
| msgid "" |
| "// A closure taking no arguments which returns an `i32`.\n" |
| " // The return type is inferred.\n" |
| msgstr "" |
| "// 인자를 받지 않고 `i32`를 반환하는 클로저입니다.\n" |
| "// 반환 타입은 추론됩니다.\n" |
| |
| #: src/fn/closures.md:47 |
| msgid "\"closure returning one: {}\"" |
| msgstr "\"1을 반환하는 클로저: {}\"" |
| |
| #: src/fn/closures/capture.md:3 |
| msgid "" |
| "Closures are inherently flexible and will do what the functionality requires " |
| "to make the closure work without annotation. This allows capturing to " |
| "flexibly adapt to the use case, sometimes moving and sometimes borrowing. " |
| "Closures can capture variables:" |
| msgstr "" |
| "클로저는 본질적으로 유연하며, 어노테이션 없이도 클로저가 작동하는 데 필요한 " |
| "기능을 수행합니다. 이를 통해 캡처 방식이 사용 사례에 따라 유연하게 적응할 수 " |
| "있으며, 때로는 이동(move)하고 때로는 빌림(borrow)을 수행합니다. 클로저는 다음" |
| "과 같은 방식으로 변수를 캡처할 수 있습니다:" |
| |
| #: src/fn/closures/capture.md:8 |
| msgid "by reference: `&T`" |
| msgstr "참조에 의한 방식: `&T`" |
| |
| #: src/fn/closures/capture.md:9 |
| msgid "by mutable reference: `&mut T`" |
| msgstr "가변 참조에 의한 방식: `&mut T`" |
| |
| #: src/fn/closures/capture.md:10 |
| msgid "by value: `T`" |
| msgstr "값에 의한 방식: `T`" |
| |
| #: src/fn/closures/capture.md:12 |
| msgid "" |
| "They preferentially capture variables by reference and only go lower when " |
| "required." |
| msgstr "" |
| "클로저는 가급적 참조로 변수를 캡처하며, 필요한 경우에만 더 낮은 수준(이동 등)" |
| "으로 내려갑니다." |
| |
| #: src/fn/closures/capture.md:19 |
| msgid "\"green\"" |
| msgstr "\"초록\"" |
| |
| #: src/fn/closures/capture.md:21 |
| msgid "" |
| "// A closure to print `color` which immediately borrows (`&`) `color` and\n" |
| " // stores the borrow and closure in the `print` variable. It will " |
| "remain\n" |
| " // borrowed until `print` is used the last time.\n" |
| " //\n" |
| " // `println!` only requires arguments by immutable reference so it " |
| "doesn't\n" |
| " // impose anything more restrictive.\n" |
| msgstr "" |
| "// `color`를 출력하는 클로저입니다. 이 클로저는 즉시 `color`를 빌리고(`&`)\n" |
| "// 그 빌림과 클로저를 `print` 변수에 저장합니다. `print`가 마지막으로\n" |
| "// 사용될 때까지 빌린 상태가 유지됩니다.\n" |
| "//\n" |
| "// `println!`은 인자로 불변 참조만 요구하므로 더 이상의 제약을\n" |
| "// 가하지 않습니다.\n" |
| |
| #: src/fn/closures/capture.md:27 |
| msgid "\"`color`: {}\"" |
| msgstr "\"`color`: {}\"" |
| |
| #: src/fn/closures/capture.md:29 |
| msgid "// Call the closure using the borrow.\n" |
| msgstr "// 빌림을 사용하여 클로저를 호출합니다.\n" |
| |
| #: src/fn/closures/capture.md:32 |
| msgid "" |
| "// `color` can be borrowed immutably again, because the closure only holds\n" |
| " // an immutable reference to `color`.\n" |
| msgstr "" |
| "// 클로저가 `color`에 대한 불변 참조만 가지고 있기 때문에,\n" |
| "// `color`를 다시 불변으로 빌릴 수 있습니다.\n" |
| |
| #: src/fn/closures/capture.md:37 |
| msgid "// A move or reborrow is allowed after the final use of `print`\n" |
| msgstr "" |
| "// `print`를 마지막으로 사용한 후에는 이동(move)이나 다시 빌리는 것이 허용됩" |
| "니다\n" |
| |
| #: src/fn/closures/capture.md:42 |
| msgid "" |
| "// A closure to increment `count` could take either `&mut count` or `count`\n" |
| " // but `&mut count` is less restrictive so it takes that. Immediately\n" |
| " // borrows `count`.\n" |
| " //\n" |
| " // A `mut` is required on `inc` because a `&mut` is stored inside. " |
| "Thus,\n" |
| " // calling the closure mutates `count` which requires a `mut`.\n" |
| msgstr "" |
| "// `count`를 증가시키는 클로저는 `&mut count`나 `count` 중 하나를 취할 수 있" |
| "지만,\n" |
| "// `&mut count`가 덜 제한적이므로 이를 취합니다. 즉시 `count`를 빌립니다.\n" |
| "//\n" |
| "// 내부에 `&mut`가 저장되어 있기 때문에 `inc`에 `mut`가 필요합니다. 따라서\n" |
| "// 클로저를 호출하면 `count`가 수정되며, 이를 위해 `mut`가 필요합니다.\n" |
| |
| #: src/fn/closures/capture.md:50 |
| msgid "\"`count`: {}\"" |
| msgstr "\"`count`: {}\"" |
| |
| #: src/fn/closures/capture.md:53 |
| msgid "// Call the closure using a mutable borrow.\n" |
| msgstr "// 가변 빌림을 사용하여 클로저를 호출합니다.\n" |
| |
| #: src/fn/closures/capture.md:56 |
| msgid "" |
| "// The closure still mutably borrows `count` because it is called later.\n" |
| " // An attempt to reborrow will lead to an error.\n" |
| " // let _reborrow = &count;\n" |
| " // ^ TODO: try uncommenting this line.\n" |
| msgstr "" |
| "// 클로저가 나중에 호출되기 때문에 여전히 `count`를 가변적으로 빌리고 있습니" |
| "다.\n" |
| "// 다시 빌리려는 시도는 에러를 발생시킵니다.\n" |
| "// let _reborrow = &count;\n" |
| "// ^ TODO: 이 줄의 주석을 해제해 보세요.\n" |
| |
| #: src/fn/closures/capture.md:62 |
| msgid "" |
| "// The closure no longer needs to borrow `&mut count`. Therefore, it is\n" |
| " // possible to reborrow without an error\n" |
| msgstr "" |
| "// 클로저가 더 이상 `&mut count`를 빌릴 필요가 없습니다. 따라서\n" |
| "// 에러 없이 다시 빌리는 것이 가능합니다.\n" |
| |
| #: src/fn/closures/capture.md:67 |
| msgid "// A non-copy type.\n" |
| msgstr "// 복사(copy)되지 않는 타입.\n" |
| |
| #: src/fn/closures/capture.md:70 |
| msgid "" |
| "// `mem::drop` requires `T` so this must take by value. A copy type\n" |
| " // would copy into the closure leaving the original untouched.\n" |
| " // A non-copy must move and so `movable` immediately moves into\n" |
| " // the closure.\n" |
| msgstr "" |
| "// `mem::drop`은 `T`를 요구하므로 값을 가져와야 합니다. 복사 타입은\n" |
| "// 원본을 그대로 둔 채 클로저 내부로 복사될 것입니다.\n" |
| "// 복사되지 않는 타입은 이동(move)해야 하므로 `movable`은 즉시\n" |
| "// 클로저 내부로 이동됩니다.\n" |
| |
| #: src/fn/closures/capture.md:75 |
| msgid "\"`movable`: {:?}\"" |
| msgstr "\"`movable`: {:?}\"" |
| |
| #: src/fn/closures/capture.md:79 |
| msgid "// `consume` consumes the variable so this can only be called once.\n" |
| msgstr "// `consume`은 변수를 소비하므로 한 번만 호출될 수 있습니다.\n" |
| |
| #: src/fn/closures/capture.md:81 |
| msgid "" |
| "// consume();\n" |
| " // ^ TODO: Try uncommenting this line.\n" |
| msgstr "" |
| "// consume();\n" |
| "// ^ TODO: 이 줄의 주석을 해제해 보세요.\n" |
| |
| #: src/fn/closures/capture.md:86 |
| msgid "" |
| "Using `move` before vertical pipes forces closure to take ownership of " |
| "captured variables:" |
| msgstr "" |
| "수직 바(`||`) 앞에 `move`를 사용하면 클로저가 캡처된 변수의 소유권을 강제로 " |
| "갖게 됩니다:" |
| |
| #: src/fn/closures/capture.md:91 |
| msgid "// `Vec` has non-copy semantics.\n" |
| msgstr "// `Vec`은 복사되지 않는 세맨틱을 가집니다.\n" |
| |
| #: src/fn/closures/capture.md:99 |
| msgid "" |
| "// println!(\"There're {} elements in vec\", haystack.len());\n" |
| " // ^ Uncommenting above line will result in compile-time error\n" |
| " // because borrow checker doesn't allow re-using variable after it\n" |
| " // has been moved.\n" |
| msgstr "" |
| "// println!(\"vec에는 {}개의 요소가 있습니다\", haystack.len());\n" |
| "// ^ 위의 줄의 주석을 해제하면 컴파일 타임 에러가 발생합니다.\n" |
| "// 빌림 검사기(borrow checker)가 이동된 후의 변수 재사용을 허용하지 않기 때문" |
| "입니다.\n" |
| |
| #: src/fn/closures/capture.md:104 |
| msgid "" |
| "// Removing `move` from closure's signature will cause closure\n" |
| " // to borrow _haystack_ variable immutably, hence _haystack_ is still\n" |
| " // available and uncommenting above line will not cause an error.\n" |
| msgstr "" |
| "// 클로저의 시그니처에서 `move`를 제거하면 클로저가 `haystack` 변수를\n" |
| "// 불변으로 빌리게 되므로, `haystack`을 여전히 사용할 수 있고\n" |
| "// 위의 줄의 주석을 해제해도 에러가 발생하지 않습니다.\n" |
| |
| #: src/fn/closures/capture.md:112 |
| msgid "" |
| "[`Box`](../../std/box.md) and [`std::mem::drop`](https://doc.rust-lang.org/" |
| "std/mem/fn.drop.html)" |
| msgstr "" |
| "[`Box`](../../std/box.md)와 [`std::mem::drop`](https://doc.rust-lang.org/std/" |
| "mem/fn.drop.html)" |
| |
| #: src/fn/closures/input_parameters.md:3 |
| msgid "" |
| "While Rust chooses how to capture variables on the fly mostly without type " |
| "annotation, this ambiguity is not allowed when writing functions. When " |
| "taking a closure as an input parameter, the closure's complete type must be " |
| "annotated using one of a few `traits`, and they're determined by what the " |
| "closure does with captured value. In order of decreasing restriction, they " |
| "are:" |
| msgstr "" |
| "Rust는 대부분 타입 어노테이션 없이 즉석에서 변수를 캡처하는 방식을 선택하지" |
| "만, 함수를 작성할 때는 이러한 모호함이 허용되지 않습니다. 클로저를 입력 파라" |
| "미터로 받을 때, 클로저의 전체 타입은 몇 가지 `트레이트` 중 하나를 사용하여 어" |
| "노테이션되어야 하며, 이는 클로저가 캡처된 값으로 무엇을 하는지에 따라 결정됩" |
| "니다. 제약이 강한 순서대로 나열하면 다음과 같습니다:" |
| |
| #: src/fn/closures/input_parameters.md:10 |
| msgid "`Fn`: the closure uses the captured value by reference (`&T`)" |
| msgstr "`Fn`: 클로저가 캡처된 값을 참조(`&T`)로 사용합니다" |
| |
| #: src/fn/closures/input_parameters.md:11 |
| msgid "" |
| "`FnMut`: the closure uses the captured value by mutable reference (`&mut T`)" |
| msgstr "`FnMut`: 클로저가 캡처된 값을 가변 참조(`&mut T`)로 사용합니다" |
| |
| #: src/fn/closures/input_parameters.md:12 |
| msgid "`FnOnce`: the closure uses the captured value by value (`T`)" |
| msgstr "`FnOnce`: 클로저가 캡처된 값을 값(`T`)으로 사용합니다" |
| |
| #: src/fn/closures/input_parameters.md:14 |
| msgid "" |
| "On a variable-by-variable basis, the compiler will capture variables in the " |
| "least restrictive manner possible." |
| msgstr "" |
| "변수별로 컴파일러는 가능한 가장 제약이 적은 방식으로 변수를 캡처합니다." |
| |
| #: src/fn/closures/input_parameters.md:17 |
| msgid "" |
| "For instance, consider a parameter annotated as `FnOnce`. This specifies " |
| "that the closure _may_ capture by `&T`, `&mut T`, or `T`, but the compiler " |
| "will ultimately choose based on how the captured variables are used in the " |
| "closure." |
| msgstr "" |
| "예를 들어, `FnOnce`로 어노테이션된 파라미터를 생각해 보세요. 이는 클로저가 " |
| "`&T`, `&mut T`, 또는 `T`로 캡처할 수 있음을 나타내지만, 컴파일러는 최종적으" |
| "로 클로저 내에서 캡처된 변수가 어떻게 사용되는지에 따라 선택합니다." |
| |
| #: src/fn/closures/input_parameters.md:22 |
| msgid "" |
| "This is because if a move is possible, then any type of borrow should also " |
| "be possible. Note that the reverse is not true. If the parameter is " |
| "annotated as `Fn`, then capturing variables by `&mut T` or `T` are not " |
| "allowed. However, `&T` is allowed." |
| msgstr "" |
| "이동(move)이 가능하다면 어떤 유형의 빌림(borrow)도 가능해야 하기 때문입니다. " |
| "그 반대는 성립하지 않음에 유의하세요. 파라미터가 `Fn`으로 어노테이션된 경우, " |
| "`&mut T`나 `T`로 변수를 캡처하는 것은 허용되지 않습니다. 하지만 `&T`는 허용됩" |
| "니다." |
| |
| #: src/fn/closures/input_parameters.md:27 |
| msgid "" |
| "In the following example, try swapping the usage of `Fn`, `FnMut`, and " |
| "`FnOnce` to see what happens:" |
| msgstr "" |
| "다음 예제에서 `Fn`, `FnMut`, `FnOnce`의 사용을 서로 바꿔보며 어떤 일이 일어나" |
| "는지 확인해 보세요:" |
| |
| #: src/fn/closures/input_parameters.md:31 |
| msgid "" |
| "// A function which takes a closure as an argument and calls it.\n" |
| "// <F> denotes that F is a \"Generic type parameter\"\n" |
| msgstr "" |
| "// 클로저를 인자로 받아 호출하는 함수입니다.\n" |
| "// <F>는 F가 \"제네릭 타입 파라미터\"임을 나타냅니다.\n" |
| |
| #: src/fn/closures/input_parameters.md:34 |
| msgid "// The closure takes no input and returns nothing.\n" |
| msgstr "// 이 클로저는 입력을 받지 않고 아무것도 반환하지 않습니다.\n" |
| |
| #: src/fn/closures/input_parameters.md:36 |
| msgid "// ^ TODO: Try changing this to `Fn` or `FnMut`.\n" |
| msgstr "// ^ TODO: 이를 `Fn`이나 `FnMut`로 변경해 보세요.\n" |
| |
| #: src/fn/closures/input_parameters.md:40 |
| msgid "// A function which takes a closure and returns an `i32`.\n" |
| msgstr "// 클로저를 받아 `i32`를 반환하는 함수입니다.\n" |
| |
| #: src/fn/closures/input_parameters.md:43 |
| msgid "// The closure takes an `i32` and returns an `i32`.\n" |
| msgstr "// 이 클로저는 `i32`를 받아 `i32`를 반환합니다.\n" |
| |
| #: src/fn/closures/input_parameters.md:53 |
| msgid "" |
| "// A non-copy type.\n" |
| " // `to_owned` creates owned data from borrowed one\n" |
| msgstr "" |
| "// 복사되지 않는 타입.\n" |
| "// `to_owned`는 빌려온 데이터로부터 소유권이 있는 데이터를 생성합니다.\n" |
| |
| #: src/fn/closures/input_parameters.md:55 |
| msgid "\"goodbye\"" |
| msgstr "\"잘 가요\"" |
| |
| #: src/fn/closures/input_parameters.md:57 |
| msgid "" |
| "// Capture 2 variables: `greeting` by reference and\n" |
| " // `farewell` by value.\n" |
| msgstr "" |
| "// 두 개의 변수를 캡처합니다: `greeting`은 참조로, `farewell`은 값으로.\n" |
| |
| #: src/fn/closures/input_parameters.md:60 |
| msgid "// `greeting` is by reference: requires `Fn`.\n" |
| msgstr "// `greeting`은 참조에 의한 방식입니다: `Fn`이 필요합니다.\n" |
| |
| #: src/fn/closures/input_parameters.md:61 |
| msgid "\"I said {}.\"" |
| msgstr "\"저는 {}라고 말했습니다.\"" |
| |
| #: src/fn/closures/input_parameters.md:63 |
| msgid "" |
| "// Mutation forces `farewell` to be captured by\n" |
| " // mutable reference. Now requires `FnMut`.\n" |
| msgstr "" |
| "// 수정을 위해 `farewell`을 가변 참조로 캡처해야 합니다.\n" |
| "// 이제 `FnMut`가 필요합니다.\n" |
| |
| #: src/fn/closures/input_parameters.md:65 |
| msgid "\"!!!\"" |
| msgstr "\"!!!\"" |
| |
| #: src/fn/closures/input_parameters.md:66 |
| msgid "\"Then I screamed {}.\"" |
| msgstr "\"그러고 나서 저는 {}라고 소리쳤습니다.\"" |
| |
| #: src/fn/closures/input_parameters.md:67 |
| msgid "\"Now I can sleep. zzzzz\"" |
| msgstr "\"이제 잘 수 있겠네요. zzzzz\"" |
| |
| #: src/fn/closures/input_parameters.md:69 |
| msgid "" |
| "// Manually calling drop forces `farewell` to\n" |
| " // be captured by value. Now requires `FnOnce`.\n" |
| msgstr "" |
| "// 수동으로 drop을 호출하면 `farewell`을 값으로\n" |
| "// 캡처해야 합니다. 이제 `FnOnce`가 필요합니다.\n" |
| |
| #: src/fn/closures/input_parameters.md:74 |
| msgid "// Call the function which applies the closure.\n" |
| msgstr "// 클로저를 적용하는 함수를 호출합니다.\n" |
| |
| #: src/fn/closures/input_parameters.md:77 |
| msgid "// `double` satisfies `apply_to_3`'s trait bound\n" |
| msgstr "// `double`은 `apply_to_3`의 트레이트 바운드를 만족합니다\n" |
| |
| #: src/fn/closures/input_parameters.md:80 |
| msgid "\"3 doubled: {}\"" |
| msgstr "\"3의 두 배: {}\"" |
| |
| #: src/fn/closures/input_parameters.md:86 |
| msgid "" |
| "[`std::mem::drop`](https://doc.rust-lang.org/std/mem/fn.drop.html), [`Fn`]" |
| "(https://doc.rust-lang.org/std/ops/trait.Fn.html), [`FnMut`](https://" |
| "doc.rust-lang.org/std/ops/trait.FnMut.html), [Generics](../../generics.md), " |
| "[where](../../generics/where.md) and [`FnOnce`](https://doc.rust-lang.org/" |
| "std/ops/trait.FnOnce.html)" |
| msgstr "" |
| "[`std::mem::drop`](https://doc.rust-lang.org/std/mem/fn.drop.html), [`Fn`]" |
| "(https://doc.rust-lang.org/std/ops/trait.Fn.html), [`FnMut`](https://" |
| "doc.rust-lang.org/std/ops/trait.FnMut.html), [제네릭](../../generics.md), " |
| "[where](../../generics/where.md) 및 [`FnOnce`](https://doc.rust-lang.org/std/" |
| "ops/trait.FnOnce.html)" |
| |
| #: src/fn/closures/anonymity.md:3 |
| msgid "" |
| "Closures succinctly capture variables from enclosing scopes. Does this have " |
| "any consequences? It surely does. Observe how using a closure as a function " |
| "parameter requires [generics](../../generics.md), which is necessary because " |
| "of how they are defined:" |
| msgstr "" |
| "클로저는 자신을 감싸고 있는 스코프에서 변수를 간결하게 캡처합니다. 이것이 어" |
| "떤 결과를 초래할까요? 분명히 결과가 있습니다. 클로저를 함수 파라미터로 사용" |
| "할 때 [제네릭](../../generics.md)이 왜 필요한지, 클로저가 어떻게 정의되는지" |
| "를 통해 살펴보세요:" |
| |
| #: src/fn/closures/anonymity.md:9 |
| msgid "// `F` must be generic.\n" |
| msgstr "// `F`는 제네릭이어야 합니다.\n" |
| |
| #: src/fn/closures/anonymity.md:16 |
| msgid "" |
| "When a closure is defined, the compiler implicitly creates a new anonymous " |
| "structure to store the captured variables inside, meanwhile implementing the " |
| "functionality via one of the `traits`: `Fn`, `FnMut`, or `FnOnce` for this " |
| "unknown type. This type is assigned to the variable which is stored until " |
| "calling." |
| msgstr "" |
| "클로저가 정의될 때, 컴파일러는 내부에 캡처된 변수를 저장하기 위해 새로운 익" |
| "명 구조체를 암시적으로 생성하며, 동시에 이 알 수 없는 타입에 대해 `Fn`, " |
| "`FnMut`, 또는 `FnOnce` 트레이트 중 하나를 통해 기능을 구현합니다. 이 타입은 " |
| "변수에 할당되어 호출될 때까지 저장됩니다." |
| |
| #: src/fn/closures/anonymity.md:22 |
| msgid "" |
| "Since this new type is of unknown type, any usage in a function will require " |
| "generics. However, an unbounded type parameter `<T>` would still be " |
| "ambiguous and not be allowed. Thus, bounding by one of the `traits`: `Fn`, " |
| "`FnMut`, or `FnOnce` (which it implements) is sufficient to specify its type." |
| msgstr "" |
| "이 새로운 타입은 알 수 없는 타입이므로, 함수에서 사용할 때는 제네릭이 필요합" |
| "니다. 하지만 제약이 없는 타입 파라미터 `<T>`는 여전히 모호하므로 허용되지 않" |
| "습니다. 따라서 클로저가 구현하는 `Fn`, `FnMut`, 또는 `FnOnce` 트레이트 중 하" |
| "나로 바운딩하는 것이 그 타입을 지정하기에 충분합니다." |
| |
| #: src/fn/closures/anonymity.md:28 |
| msgid "" |
| "// `F` must implement `Fn` for a closure which takes no\n" |
| "// inputs and returns nothing - exactly what is required\n" |
| "// for `print`.\n" |
| msgstr "" |
| "// `F`는 입력이 없고 아무것도 반환하지 않는 클로저를 위해\n" |
| "// `Fn`을 구현해야 합니다. 이는 정확히 `print`에 요구되는 사항입니다.\n" |
| |
| #: src/fn/closures/anonymity.md:39 |
| msgid "" |
| "// Capture `x` into an anonymous type and implement\n" |
| " // `Fn` for it. Store it in `print`.\n" |
| msgstr "" |
| "// `x`를 익명 타입으로 캡처하고 그에 대해 `Fn`을 구현합니다.\n" |
| "// 이를 `print`에 저장합니다.\n" |
| |
| #: src/fn/closures/anonymity.md:49 |
| msgid "" |
| "[A thorough analysis](https://huonw.github.io/blog/2015/05/finding-closure-" |
| "in-rust/), [`Fn`](https://doc.rust-lang.org/std/ops/trait.Fn.html), [`FnMut`]" |
| "(https://doc.rust-lang.org/std/ops/trait.FnMut.html), and [`FnOnce`](https://" |
| "doc.rust-lang.org/std/ops/trait.FnOnce.html)" |
| msgstr "" |
| "[철저한 분석](https://huonw.github.io/blog/2015/05/finding-closure-in-" |
| "rust/), [`Fn`](https://doc.rust-lang.org/std/ops/trait.Fn.html), [`FnMut`]" |
| "(https://doc.rust-lang.org/std/ops/trait.FnMut.html), 그리고 [`FnOnce`]" |
| "(https://doc.rust-lang.org/std/ops/trait.FnOnce.html)" |
| |
| #: src/fn/closures/input_functions.md:3 |
| msgid "" |
| "Since closures may be used as arguments, you might wonder if the same can be " |
| "said about functions. And indeed they can! If you declare a function that " |
| "takes a closure as parameter, then any function that satisfies the trait " |
| "bound of that closure can be passed as a parameter." |
| msgstr "" |
| "클로저가 인자로 사용될 수 있으므로, 함수에 대해서도 똑같이 말할 수 있는지 궁" |
| "금할 것입니다. 실제로 가능합니다! 클로저를 파라미터로 받는 함수를 선언하면, " |
| "해당 클로저의 트레이트 바운드를 만족하는 모든 함수를 파라미터로 전달할 수 있" |
| "습니다." |
| |
| #: src/fn/closures/input_functions.md:9 |
| msgid "" |
| "// Define a function which takes a generic `F` argument\n" |
| "// bounded by `Fn`, and calls it\n" |
| msgstr "" |
| "// `Fn`으로 바운딩된 제네릭 `F` 인자를 받아\n" |
| "// 호출하는 함수를 정의합니다\n" |
| |
| #: src/fn/closures/input_functions.md:14 |
| msgid "// Define a wrapper function satisfying the `Fn` bound\n" |
| msgstr "// `Fn` 바운드를 만족하는 래퍼 함수를 정의합니다\n" |
| |
| #: src/fn/closures/input_functions.md:17 |
| msgid "\"I'm a function!\"" |
| msgstr "\"저는 함수입니다!\"" |
| |
| #: src/fn/closures/input_functions.md:21 |
| msgid "// Define a closure satisfying the `Fn` bound\n" |
| msgstr "// `Fn` 바운드를 만족하는 클로저를 정의합니다\n" |
| |
| #: src/fn/closures/input_functions.md:22 |
| msgid "\"I'm a closure!\"" |
| msgstr "\"저는 클로저입니다!\"" |
| |
| #: src/fn/closures/input_functions.md:29 |
| msgid "" |
| "As an additional note, the `Fn`, `FnMut`, and `FnOnce` `traits` dictate how " |
| "a closure captures variables from the enclosing scope." |
| msgstr "" |
| "추가로, `Fn`, `FnMut`, `FnOnce` 트레이트는 클로저가 주변 스코프에서 변수를 캡" |
| "처하는 방식을 결정합니다." |
| |
| #: src/fn/closures/input_functions.md:34 |
| msgid "" |
| "[`Fn`](https://doc.rust-lang.org/std/ops/trait.Fn.html), [`FnMut`](https://" |
| "doc.rust-lang.org/std/ops/trait.FnMut.html), and [`FnOnce`](https://doc.rust-" |
| "lang.org/std/ops/trait.FnOnce.html)" |
| msgstr "" |
| "[`Fn`](https://doc.rust-lang.org/std/ops/trait.Fn.html), [`FnMut`](https://" |
| "doc.rust-lang.org/std/ops/trait.FnMut.html), 그리고 [`FnOnce`](https://" |
| "doc.rust-lang.org/std/ops/trait.FnOnce.html)" |
| |
| #: src/fn/closures/output_parameters.md:3 |
| msgid "" |
| "Closures as input parameters are possible, so returning closures as output " |
| "parameters should also be possible. However, anonymous closure types are, by " |
| "definition, unknown, so we have to use `impl Trait` to return them." |
| msgstr "" |
| "클로저를 입력 파라미터로 사용하는 것이 가능하므로, 클로저를 출력 파라미터로 " |
| "반환하는 것도 가능해야 합니다. 하지만 익명 클로저 타입은 정의상 알 수 없으므" |
| "로, 이를 반환하려면 `impl Trait`를 사용해야 합니다." |
| |
| #: src/fn/closures/output_parameters.md:8 |
| msgid "The valid traits for returning a closure are:" |
| msgstr "클로저를 반환하기 위해 유효한 트레이트들은 다음과 같습니다:" |
| |
| #: src/fn/closures/output_parameters.md:10 |
| msgid "`Fn`" |
| msgstr "`Fn`" |
| |
| #: src/fn/closures/output_parameters.md:11 |
| msgid "`FnMut`" |
| msgstr "`FnMut`" |
| |
| #: src/fn/closures/output_parameters.md:12 |
| msgid "`FnOnce`" |
| msgstr "`FnOnce`" |
| |
| #: src/fn/closures/output_parameters.md:14 |
| msgid "" |
| "Beyond this, the `move` keyword must be used, which signals that all " |
| "captures occur by value. This is required because any captures by reference " |
| "would be dropped as soon as the function exited, leaving invalid references " |
| "in the closure." |
| msgstr "" |
| "이 외에도, 모든 캡처가 값에 의해 발생함을 나타내는 `move` 키워드를 반드시 사" |
| "용해야 합니다. 이는 참조에 의한 캡처가 함수가 종료되는 즉시 드롭되어 클로저" |
| "에 유효하지 않은 참조를 남기기 때문에 필요합니다." |
| |
| #: src/fn/closures/output_parameters.md:21 |
| msgid "\"Fn\"" |
| msgstr "\"Fn\"" |
| |
| #: src/fn/closures/output_parameters.md:23 |
| #: src/fn/closures/output_parameters.md:29 |
| #: src/fn/closures/output_parameters.md:35 |
| msgid "\"This is a: {}\"" |
| msgstr "\"이것은 {}입니다\"" |
| |
| #: src/fn/closures/output_parameters.md:27 |
| msgid "\"FnMut\"" |
| msgstr "\"FnMut\"" |
| |
| #: src/fn/closures/output_parameters.md:33 |
| msgid "\"FnOnce\"" |
| msgstr "\"FnOnce\"" |
| |
| #: src/fn/closures/output_parameters.md:51 |
| msgid "" |
| "[`Fn`](https://doc.rust-lang.org/std/ops/trait.Fn.html), [`FnMut`](https://" |
| "doc.rust-lang.org/std/ops/trait.FnMut.html), [Generics](../../generics.md) " |
| "and [impl Trait](../../trait/impl_trait.md)." |
| msgstr "" |
| "[`Fn`](https://doc.rust-lang.org/std/ops/trait.Fn.html), [`FnMut`](https://" |
| "doc.rust-lang.org/std/ops/trait.FnMut.html), [제네릭](../../generics.md) 및 " |
| "[impl Trait](../../trait/impl_trait.md)." |
| |
| #: src/fn/closures/closure_examples.md:3 |
| msgid "" |
| "This section contains a few examples of using closures from the `std` " |
| "library." |
| msgstr "" |
| "이 섹션에는 `std` 라이브러리의 클로저를 사용하는 몇 가지 예제가 포함되어 있습" |
| "니다." |
| |
| #: src/fn/closures/closure_examples/iter_any.md:3 |
| msgid "" |
| "`Iterator::any` is a function which when passed an iterator, will return " |
| "`true` if any element satisfies the predicate. Otherwise `false`. Its " |
| "signature:" |
| msgstr "" |
| "`Iterator::any`는 이터레이터가 주어졌을 때, 어떤 요소라도 서술어(predicate)" |
| "를 만족하면 `true`를 반환하는 함수입니다. 그렇지 않으면 `false`를 반환합니" |
| "다. 시그니처는 다음과 같습니다:" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:9 |
| #: src/fn/closures/closure_examples/iter_find.md:9 |
| msgid "// The type being iterated over.\n" |
| msgstr "// 반복되는 요소의 타입.\n" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:12 |
| msgid "" |
| "// `any` takes `&mut self` meaning the caller may be borrowed\n" |
| " // and modified, but not consumed.\n" |
| msgstr "" |
| "// `any`는 `&mut self`를 취하므로 호출자는 빌려지거나\n" |
| "// 수정될 수 있지만, 소비(consume)되지는 않습니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:15 |
| msgid "" |
| "// `FnMut` meaning any captured variable may at most be\n" |
| " // modified, not consumed. `Self::Item` is the closure parameter " |
| "type,\n" |
| " // which is determined by the iterator (e.g., `&T` for `.iter()`,\n" |
| " // `T` for `.into_iter()`).\n" |
| msgstr "" |
| "// `FnMut`는 캡처된 변수가 최대 수정될 수 있지만 소비되지는 않음을 의미합니" |
| "다.\n" |
| "// `Self::Item`은 클로저 파라미터 타입으로, 이터레이터에 의해 결정됩니다\n" |
| "// (예: `.iter()`의 경우 `&T`, `.into_iter()`의 경우 `T`).\n" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:28 |
| msgid "// `iter()` for vecs yields `&i32`. Destructure to `i32`.\n" |
| msgstr "" |
| "// 벡터에 대한 `iter()`는 `&i32`를 생성합니다. `i32`로 구조 분해합니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:29 |
| msgid "\"2 in vec1: {}\"" |
| msgstr "\"vec1에 2가 있음: {}\"" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:30 |
| msgid "// `into_iter()` for vecs yields `i32`. No destructuring required.\n" |
| msgstr "" |
| "// 벡터에 대한 `into_iter()`는 `i32`를 생성합니다. 구조 분해가 필요 없습니" |
| "다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:31 |
| msgid "\"2 in vec2: {}\"" |
| msgstr "\"vec2에 2가 있음: {}\"" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:33 |
| msgid "" |
| "// `iter()` only borrows `vec1` and its elements, so they can be used again\n" |
| msgstr "" |
| "// `iter()`는 오직 `vec1`과 그 요소들을 빌리기만 하므로, 다시 사용할 수 있습" |
| "니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:34 |
| msgid "\"vec1 len: {}\"" |
| msgstr "\"vec1 길이: {}\"" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:35 |
| msgid "\"First element of vec1 is: {}\"" |
| msgstr "\"vec1의 첫 번째 요소: {}\"" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:36 |
| msgid "" |
| "// `into_iter()` does move `vec2` and its elements, so they cannot be used " |
| "again\n" |
| " // println!(\"First element of vec2 is: {}\", vec2[0]);\n" |
| " // println!(\"vec2 len: {}\", vec2.len());\n" |
| " // TODO: uncomment two lines above and see compiler errors.\n" |
| msgstr "" |
| "// `into_iter()`는 `vec2`와 그 요소들을 이동(move)시키므로, 다시 사용할 수 없" |
| "습니다.\n" |
| "// println!(\"vec2의 첫 번째 요소: {}\", vec2[0]);\n" |
| "// println!(\"vec2 길이: {}\", vec2.len());\n" |
| "// TODO: 위의 두 줄의 주석을 해제하고 컴파일 에러를 확인해 보세요.\n" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:44 |
| msgid "// `iter()` for arrays yields `&i32`.\n" |
| msgstr "// 배열에 대한 `iter()`는 `&i32`를 생성합니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:45 |
| msgid "\"2 in array1: {}\"" |
| msgstr "\"array1에 2가 있음: {}\"" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:46 |
| msgid "// `into_iter()` for arrays yields `i32`.\n" |
| msgstr "// 배열에 대한 `into_iter()`는 `i32`를 생성합니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:47 |
| msgid "\"2 in array2: {}\"" |
| msgstr "\"array2에 2가 있음: {}\"" |
| |
| #: src/fn/closures/closure_examples/iter_any.md:53 |
| msgid "" |
| "[`std::iter::Iterator::any`](https://doc.rust-lang.org/std/iter/" |
| "trait.Iterator.html#method.any)" |
| msgstr "" |
| "[`std::iter::Iterator::any`](https://doc.rust-lang.org/std/iter/" |
| "trait.Iterator.html#method.any)" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:3 |
| msgid "" |
| "`Iterator::find` is a function which iterates over an iterator and searches " |
| "for the first value which satisfies some condition. If none of the values " |
| "satisfy the condition, it returns `None`. Its signature:" |
| msgstr "" |
| "`Iterator::find`는 이터레이터를 순회하며 어떤 조건을 만족하는 첫 번째 값을 찾" |
| "는 함수입니다. 조건을 만족하는 값이 없으면 `None`을 반환합니다. 시그니처는 다" |
| "음과 같습니다:" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:12 |
| msgid "" |
| "// `find` takes `&mut self` meaning the caller may be borrowed\n" |
| " // and modified, but not consumed.\n" |
| msgstr "" |
| "// `find`는 `&mut self`를 취하므로 호출자는 빌려지거나\n" |
| "// 수정될 수 있지만, 소비(consume)되지는 않습니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:15 |
| msgid "" |
| "// `FnMut` meaning any captured variable may at most be\n" |
| " // modified, not consumed. `&Self::Item` states it takes\n" |
| " // arguments to the closure by reference.\n" |
| msgstr "" |
| "// `FnMut`는 캡처된 변수가 최대 수정될 수 있지만 소비되지는 않음을 의미합니" |
| "다.\n" |
| "// `&Self::Item`은 클로저에 대한 인자를 참조로 취함을 나타냅니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:27 |
| msgid "// `vec1.iter()` yields `&i32`.\n" |
| msgstr "// `vec1.iter()`는 `&i32`를 생성합니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:29 |
| msgid "// `vec2.into_iter()` yields `i32`.\n" |
| msgstr "// `vec2.into_iter()`는 `i32`를 생성합니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:32 |
| msgid "" |
| "// `iter()` yields `&i32`, and `find` passes `&Item` to the predicate.\n" |
| " // Since `Item = &i32`, the closure argument has type `&&i32`,\n" |
| " // which we pattern-match to dereference down to `i32`.\n" |
| msgstr "" |
| "// `iter()`는 `&i32`를 생성하고, `find`는 서술어(predicate)에 `&Item`을 전달" |
| "합니다.\n" |
| "// `Item = &i32`이므로 클로저 인자는 `&&i32` 타입을 가지며,\n" |
| "// 우리는 이를 패턴 매칭하여 `i32`로 역참조합니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:35 |
| msgid "\"Find 2 in vec1: {:?}\"" |
| msgstr "\"vec1에서 2 찾기: {:?}\"" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:37 |
| msgid "" |
| "// `into_iter()` yields `i32`, and `find` passes `&Item` to the predicate.\n" |
| " // Since `Item = i32`, the closure argument has type `&i32`,\n" |
| " // which we pattern-match to dereference down to `i32`.\n" |
| msgstr "" |
| "// `into_iter()`는 `i32`를 생성하고, `find`는 서술어에 `&Item`을 전달합니" |
| "다.\n" |
| "// `Item = i32`이므로 클로저 인자는 `&i32` 타입을 가지며,\n" |
| "// 우리는 이를 패턴 매칭하여 `i32`로 역참조합니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:40 |
| msgid "\"Find 2 in vec2: {:?}\"" |
| msgstr "\"vec2에서 2 찾기: {:?}\"" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:45 |
| msgid "// `array1.iter()` yields `&i32`\n" |
| msgstr "// `array1.iter()`는 `&i32`를 생성합니다\n" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:46 |
| msgid "\"Find 2 in array1: {:?}\"" |
| msgstr "\"array1에서 2 찾기: {:?}\"" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:47 |
| msgid "// `array2.into_iter()` yields `i32`\n" |
| msgstr "// `array2.into_iter()`는 `i32`를 생성합니다\n" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:48 |
| msgid "\"Find 2 in array2: {:?}\"" |
| msgstr "\"array2에서 2 찾기: {:?}\"" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:52 |
| msgid "" |
| "`Iterator::find` gives you a reference to the item. But if you want the " |
| "_index_ of the item, use `Iterator::position`." |
| msgstr "" |
| "`Iterator::find`는 아이템에 대한 참조를 제공합니다. 하지만 아이템의 인덱스를 " |
| "원한다면 `Iterator::position`을 사용하세요." |
| |
| #: src/fn/closures/closure_examples/iter_find.md:59 |
| msgid "" |
| "// `position` passes the iterator’s `Item` by value to the predicate.\n" |
| " // `vec.iter()` yields `&i32`, so the predicate receives `&i32`,\n" |
| " // which we pattern-match to dereference to `i32`.\n" |
| msgstr "" |
| "// `position`은 이터레이터의 `Item`을 값으로 서술어에 전달합니다.\n" |
| "// `vec.iter()`는 `&i32`를 생성하므로 서술어는 `&i32`를 받으며,\n" |
| "// 우리는 이를 패턴 매칭하여 `i32`로 역참조합니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:65 |
| msgid "" |
| "// `vec.into_iter()` yields `i32`, so the predicate receives `i32` " |
| "directly.\n" |
| msgstr "" |
| "// `vec.into_iter()`는 `i32`를 생성하므로 서술어는 `i32`를 직접 받습니다.\n" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:73 |
| msgid "" |
| "[`std::iter::Iterator::find`](https://doc.rust-lang.org/std/iter/" |
| "trait.Iterator.html#method.find)" |
| msgstr "" |
| "[`std::iter::Iterator::find`](https://doc.rust-lang.org/std/iter/" |
| "trait.Iterator.html#method.find)" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:75 |
| msgid "" |
| "[`std::iter::Iterator::find_map`](https://doc.rust-lang.org/std/iter/" |
| "trait.Iterator.html#method.find_map)" |
| msgstr "" |
| "[`std::iter::Iterator::find_map`](https://doc.rust-lang.org/std/iter/" |
| "trait.Iterator.html#method.find_map)" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:77 |
| msgid "" |
| "[`std::iter::Iterator::position`](https://doc.rust-lang.org/std/iter/" |
| "trait.Iterator.html#method.position)" |
| msgstr "" |
| "[`std::iter::Iterator::position`](https://doc.rust-lang.org/std/iter/" |
| "trait.Iterator.html#method.position)" |
| |
| #: src/fn/closures/closure_examples/iter_find.md:79 |
| msgid "" |
| "[`std::iter::Iterator::rposition`](https://doc.rust-lang.org/std/iter/" |
| "trait.Iterator.html#method.rposition)" |
| msgstr "" |
| "[`std::iter::Iterator::rposition`](https://doc.rust-lang.org/std/iter/" |
| "trait.Iterator.html#method.rposition)" |
| |
| #: src/fn/hof.md:3 |
| msgid "" |
| "Rust provides Higher Order Functions (HOF). These are functions that take " |
| "one or more functions and/or produce a more useful function. HOFs and lazy " |
| "iterators give Rust its functional flavor." |
| msgstr "" |
| "Rust는 고차 함수(Higher Order Functions, HOF)를 제공합니다. 이들은 하나 이상" |
| "의 함수를 인자로 받거나 더 유용한 함수를 만들어내는 함수들입니다. HOF와 게으" |
| "른(lazy) 이터레이터는 Rust에 함수형 프로그래밍의 풍미를 더해줍니다." |
| |
| #: src/fn/hof.md:13 |
| msgid "\"Find the sum of all the numbers with odd squares under 1000\"" |
| msgstr "\"1000 미만의 홀수 제곱값들의 합 찾기\"" |
| |
| #: src/fn/hof.md:16 |
| msgid "" |
| "// Imperative approach\n" |
| " // Declare accumulator variable\n" |
| msgstr "" |
| "// 명령형 접근 방식\n" |
| "// 누적 변수 선언\n" |
| |
| #: src/fn/hof.md:19 |
| msgid "// Iterate: 0, 1, 2, ... to infinity\n" |
| msgstr "// 반복: 0, 1, 2, ... 무한대까지\n" |
| |
| #: src/fn/hof.md:21 |
| msgid "// Square the number\n" |
| msgstr "// 숫자를 제곱합니다\n" |
| |
| #: src/fn/hof.md:25 |
| msgid "// Break loop if exceeded the upper limit\n" |
| msgstr "// 상한을 초과하면 루프를 종료합니다\n" |
| |
| #: src/fn/hof.md:28 |
| msgid "// Accumulate value, if it's odd\n" |
| msgstr "// 홀수라면 값을 누적합니다\n" |
| |
| #: src/fn/hof.md:32 |
| msgid "\"imperative style: {}\"" |
| msgstr "\"명령형 스타일: {}\"" |
| |
| #: src/fn/hof.md:34 |
| msgid "// Functional approach\n" |
| msgstr "// 함수형 접근 방식\n" |
| |
| #: src/fn/hof.md:36 |
| msgid "// Below upper limit\n" |
| msgstr "// 상한 미만\n" |
| |
| #: src/fn/hof.md:37 |
| msgid "// That are odd\n" |
| msgstr "// 홀수인 것들\n" |
| |
| #: src/fn/hof.md:38 |
| msgid "// Sum them\n" |
| msgstr "// 합계를 구함\n" |
| |
| #: src/fn/hof.md:39 |
| msgid "\"functional style: {}\"" |
| msgstr "\"함수형 스타일: {}\"" |
| |
| #: src/fn/hof.md:43 |
| msgid "" |
| "[Option](https://doc.rust-lang.org/core/option/enum.Option.html) and " |
| "[Iterator](https://doc.rust-lang.org/core/iter/trait.Iterator.html) " |
| "implement their fair share of HOFs." |
| msgstr "" |
| "[Option](https://doc.rust-lang.org/core/option/enum.Option.html)과 [Iterator]" |
| "(https://doc.rust-lang.org/core/iter/trait.Iterator.html)는 상당수의 HOF를 구" |
| "현하고 있습니다." |
| |
| #: src/fn/diverging.md:3 |
| msgid "" |
| "Diverging functions never return. They are marked using `!`, which is an " |
| "empty type." |
| msgstr "" |
| "발산 함수(Diverging functions)는 절대 반환되지 않습니다. 이들은 빈 타입인 `!`" |
| "를 사용하여 표시됩니다." |
| |
| #: src/fn/diverging.md:7 src/fn/diverging.md:35 |
| msgid "\"This call never returns.\"" |
| msgstr "\"이 호출은 절대 반환되지 않습니다.\"" |
| |
| #: src/fn/diverging.md:11 |
| msgid "" |
| "As opposed to all the other types, this one cannot be instantiated, because " |
| "the set of all possible values this type can have is empty. Note that, it is " |
| "different from the `()` type, which has exactly one possible value." |
| msgstr "" |
| "다른 모든 타입들과 달리, 이 타입은 인스턴스화할 수 없습니다. 이 타입이 가질 " |
| "수 있는 모든 가능한 값의 집합이 비어 있기 때문입니다. 이는 정확히 하나의 가능" |
| "한 값을 갖는 `()` 타입과는 다르다는 점에 유의하세요." |
| |
| #: src/fn/diverging.md:15 |
| msgid "" |
| "For example, this function returns as usual, although there is no " |
| "information in the return value." |
| msgstr "예를 들어, 이 함수는 반환 값에 정보가 없더라도 평소와 같이 반환됩니다." |
| |
| #: src/fn/diverging.md:25 |
| msgid "\"This function returns and you can see this line.\"" |
| msgstr "\"이 함수는 반환되며 당신은 이 줄을 볼 수 있습니다.\"" |
| |
| #: src/fn/diverging.md:29 |
| msgid "" |
| "As opposed to this function, which will never return the control back to the " |
| "caller." |
| msgstr "반면 이 함수는 호출자에게 제어권을 절대 반환하지 않습니다." |
| |
| #: src/fn/diverging.md:36 |
| msgid "\"You will never see this line!\"" |
| msgstr "\"당신은 결코 이 줄을 볼 수 없을 것입니다!\"" |
| |
| #: src/fn/diverging.md:40 |
| msgid "" |
| "Although this might seem like an abstract concept, it is actually very " |
| "useful and often handy. The main advantage of this type is that it can be " |
| "cast to any other type, making it versatile in situations where an exact " |
| "type is required, such as in match branches. This flexibility allows us to " |
| "write code like this:" |
| msgstr "" |
| "이것이 추상적인 개념처럼 보일 수 있지만, 실제로는 매우 유용하며 종종 편리하" |
| "게 사용됩니다. 이 타입의 주요 장점은 다른 어떤 타입으로도 형변환될 수 있다는 " |
| "것이며, 이는 match 분기와 같이 정확한 타입이 요구되는 상황에서 다재다능하게 " |
| "만들어줍니다. 이러한 유연성 덕분에 다음과 같은 코드를 작성할 수 있습니다:" |
| |
| #: src/fn/diverging.md:50 |
| msgid "" |
| "// Notice that the return type of this match expression must be u32\n" |
| " // because of the type of the \"addition\" variable.\n" |
| msgstr "" |
| "// 이 match 표현식의 반환 타입은 \"addition\" 변수의 타입 때문에\n" |
| "// 반드시 u32여야 함에 주목하세요.\n" |
| |
| #: src/fn/diverging.md:53 |
| msgid "// The \"i\" variable is of type u32, which is perfectly fine.\n" |
| msgstr "// \"i\" 변수는 u32 타입이며, 이는 완벽하게 괜찮습니다.\n" |
| |
| #: src/fn/diverging.md:55 |
| msgid "" |
| "// On the other hand, the \"continue\" expression does not return\n" |
| " // u32, but it is still fine, because it never returns and " |
| "therefore\n" |
| " // does not violate the type requirements of the match " |
| "expression.\n" |
| msgstr "" |
| "// 반면에 \"continue\" 표현식은 u32를 반환하지 않지만,\n" |
| "// 결코 반환되지 않으므로 match 표현식의 타입 요구 사항을\n" |
| "// 위반하지 않으며 여전히 괜찮습니다.\n" |
| |
| #: src/fn/diverging.md:64 |
| msgid "\"Sum of odd numbers up to 9 (excluding): {}\"" |
| msgstr "\"9 미만의 홀수들의 합: {}\"" |
| |
| #: src/fn/diverging.md:68 |
| msgid "" |
| "It is also the return type of functions that loop forever (e.g. `loop {}`) " |
| "like network servers or functions that terminate the process (e.g. `exit()`)." |
| msgstr "" |
| "또한 네트워크 서버처럼 영원히 루프를 도는 함수(예: `loop {}`)나 프로세스를 종" |
| "료하는 함수(예: `exit()`)의 반환 타입이기도 합니다." |
| |
| #: src/mod.md:3 |
| msgid "" |
| "Rust provides a powerful module system that can be used to hierarchically " |
| "split code in logical units (modules), and manage visibility (public/" |
| "private) between them." |
| msgstr "" |
| "Rust는 코드를 논리적 단위(모듈)로 계층적으로 나누고, 그들 사이의 가시성" |
| "(public/private)을 관리하는 데 사용할 수 있는 강력한 모듈 시스템을 제공합니" |
| "다." |
| |
| #: src/mod.md:7 |
| msgid "" |
| "A module is a collection of items: functions, structs, traits, `impl` " |
| "blocks, and even other modules." |
| msgstr "" |
| "모듈은 함수, 구조체, 트레이트, `impl` 블록, 그리고 다른 모듈까지 포함하는 아" |
| "이템들의 모음입니다." |
| |
| #: src/mod/visibility.md:3 |
| msgid "" |
| "By default, the items in a module have private visibility, but this can be " |
| "overridden with the `pub` modifier. Only the public items of a module can be " |
| "accessed from outside the module scope." |
| msgstr "" |
| "기본적으로 모듈 내의 아이템들은 비공개(private) 가시성을 가지지만, `pub` 수식" |
| "어를 사용하여 이를 재정의할 수 있습니다. 모듈 스코프 외부에서는 모듈의 공개" |
| "(public) 아이템만 접근할 수 있습니다." |
| |
| #: src/mod/visibility.md:8 |
| msgid "// A module named `my_mod`\n" |
| msgstr "// `my_mod`라는 이름의 모듈\n" |
| |
| #: src/mod/visibility.md:10 |
| msgid "// Items in modules default to private visibility.\n" |
| msgstr "// 모듈 내의 아이템들은 기본적으로 비공개 가시성을 가집니다.\n" |
| |
| #: src/mod/visibility.md:12 |
| msgid "\"called `my_mod::private_function()`\"" |
| msgstr "\"`my_mod::private_function()` 호출됨\"" |
| |
| #: src/mod/visibility.md:15 |
| msgid "// Use the `pub` modifier to override default visibility.\n" |
| msgstr "// 기본 가시성을 재정의하려면 `pub` 수식어를 사용하세요.\n" |
| |
| #: src/mod/visibility.md:17 |
| msgid "\"called `my_mod::function()`\"" |
| msgstr "\"`my_mod::function()` 호출됨\"" |
| |
| #: src/mod/visibility.md:20 |
| msgid "" |
| "// Items can access other items in the same module,\n" |
| " // even when private.\n" |
| msgstr "" |
| "// 아이템들은 같은 모듈 내의 다른 아이템들에 접근할 수 있으며,\n" |
| "// 이는 비공개 아이템이라도 마찬가지입니다.\n" |
| |
| #: src/mod/visibility.md:23 |
| msgid "\"called `my_mod::indirect_access()`, that\\n> \"" |
| msgstr "\"`my_mod::indirect_access()` 호출됨, 결과는\\n> \"" |
| |
| #: src/mod/visibility.md:27 |
| msgid "// Modules can also be nested\n" |
| msgstr "// 모듈은 중첩될 수도 있습니다\n" |
| |
| #: src/mod/visibility.md:30 |
| msgid "\"called `my_mod::nested::function()`\"" |
| msgstr "\"`my_mod::nested::function()` 호출됨\"" |
| |
| #: src/mod/visibility.md:35 |
| msgid "\"called `my_mod::nested::private_function()`\"" |
| msgstr "\"`my_mod::nested::private_function()` 호출됨\"" |
| |
| #: src/mod/visibility.md:38 |
| msgid "" |
| "// Functions declared using `pub(in path)` syntax are only visible\n" |
| " // within the given path. `path` must be a parent or ancestor " |
| "module\n" |
| msgstr "" |
| "// `pub(in path)` 구문을 사용하여 선언된 함수들은 오직 지정된\n" |
| "// 경로 내에서만 보입니다. `path`는 반드시 부모 또는 조상 모듈이어야 합니" |
| "다.\n" |
| |
| #: src/mod/visibility.md:41 |
| msgid "\"called `my_mod::nested::public_function_in_my_mod()`, that\\n> \"" |
| msgstr "\"`my_mod::nested::public_function_in_my_mod()` 호출됨, 결과는\\n> \"" |
| |
| #: src/mod/visibility.md:45 |
| msgid "" |
| "// Functions declared using `pub(self)` syntax are only visible within\n" |
| " // the current module, which is the same as leaving them private\n" |
| msgstr "" |
| "// `pub(self)` 구문을 사용하여 선언된 함수들은 오직 현재 모듈\n" |
| "// 내에서만 보이며, 이는 비공개로 두는 것과 동일합니다.\n" |
| |
| #: src/mod/visibility.md:48 |
| msgid "\"called `my_mod::nested::public_function_in_nested()`\"" |
| msgstr "\"`my_mod::nested::public_function_in_nested()` 호출됨\"" |
| |
| #: src/mod/visibility.md:51 |
| msgid "" |
| "// Functions declared using `pub(super)` syntax are only visible within\n" |
| " // the parent module\n" |
| msgstr "" |
| "// `pub(super)` 구문을 사용하여 선언된 함수들은 오직 부모 모듈\n" |
| "// 내에서만 보입니다.\n" |
| |
| #: src/mod/visibility.md:54 |
| msgid "\"called `my_mod::nested::public_function_in_super_mod()`\"" |
| msgstr "\"`my_mod::nested::public_function_in_super_mod()` 호출됨\"" |
| |
| #: src/mod/visibility.md:59 |
| msgid "\"called `my_mod::call_public_function_in_my_mod()`, that\\n> \"" |
| msgstr "\"`my_mod::call_public_function_in_my_mod()` 호출됨, 결과는\\n> \"" |
| |
| #: src/mod/visibility.md:61 |
| msgid "\"> \"" |
| msgstr "\"> \"" |
| |
| #: src/mod/visibility.md:65 |
| msgid "// pub(crate) makes functions visible only within the current crate\n" |
| msgstr "// pub(crate)는 함수를 오직 현재 크레이트 내에서만 보이게 만듭니다\n" |
| |
| #: src/mod/visibility.md:67 |
| msgid "\"called `my_mod::public_function_in_crate()`\"" |
| msgstr "\"`my_mod::public_function_in_crate()` 호출됨\"" |
| |
| #: src/mod/visibility.md:70 |
| msgid "// Nested modules follow the same rules for visibility\n" |
| msgstr "// 중첩된 모듈도 동일한 가시성 규칙을 따릅니다\n" |
| |
| #: src/mod/visibility.md:74 |
| msgid "\"called `my_mod::private_nested::function()`\"" |
| msgstr "\"`my_mod::private_nested::function()` 호출됨\"" |
| |
| #: src/mod/visibility.md:77 |
| msgid "" |
| "// Private parent items will still restrict the visibility of a child item,\n" |
| " // even if it is declared as visible within a bigger scope.\n" |
| msgstr "" |
| "// 비공개 부모 아이템은 자식 아이템이 더 큰 스코프 내에서 보이도록\n" |
| "// 선언되어 있더라도 여전히 그 가시성을 제한합니다.\n" |
| |
| #: src/mod/visibility.md:81 |
| msgid "\"called `my_mod::private_nested::restricted_function()`\"" |
| msgstr "\"`my_mod::private_nested::restricted_function()` 호출됨\"" |
| |
| #: src/mod/visibility.md:87 src/mod/use.md:25 src/mod/super.md:8 |
| #: src/mod/split.md:24 |
| msgid "\"called `function()`\"" |
| msgstr "\"`function()` 호출됨\"" |
| |
| #: src/mod/visibility.md:91 |
| msgid "" |
| "// Modules allow disambiguation between items that have the same name.\n" |
| msgstr "" |
| "// 모듈은 이름이 같은 아이템들 간의 모호함을 해소할 수 있게 해줍니다.\n" |
| |
| #: src/mod/visibility.md:95 |
| msgid "" |
| "// Public items, including those inside nested modules, can be\n" |
| " // accessed from outside the parent module.\n" |
| msgstr "" |
| "// 중첩된 모듈 내부에 있는 아이템을 포함한 공개 아이템들은\n" |
| "// 부모 모듈 외부에서 접근할 수 있습니다.\n" |
| |
| #: src/mod/visibility.md:101 |
| msgid "// pub(crate) items can be called from anywhere in the same crate\n" |
| msgstr "" |
| "// pub(crate) 아이템은 같은 크레이트 내 어디에서나 호출될 수 있습니다\n" |
| |
| #: src/mod/visibility.md:104 |
| msgid "" |
| "// pub(in path) items can only be called from within the module specified\n" |
| " // Error! function `public_function_in_my_mod` is private\n" |
| " //my_mod::nested::public_function_in_my_mod();\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// `pub(in path)` 아이템은 오직 지정된 모듈 내에서만 호출될 수 있습니다\n" |
| "// 에러! `public_function_in_my_mod` 함수는 비공개입니다\n" |
| "// my_mod::nested::public_function_in_my_mod();\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/mod/visibility.md:109 |
| msgid "" |
| "// Private items of a module cannot be directly accessed, even if\n" |
| " // nested in a public module:\n" |
| msgstr "" |
| "// 모듈의 비공개 아이템은 공개 모듈에 중첩되어 있더라도\n" |
| "// 직접 접근할 수 없습니다:\n" |
| |
| #: src/mod/visibility.md:112 |
| msgid "" |
| "// Error! `private_function` is private\n" |
| " //my_mod::private_function();\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! `private_function`은 비공개입니다\n" |
| "// my_mod::private_function();\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/mod/visibility.md:116 |
| msgid "" |
| "// Error! `private_function` is private\n" |
| " //my_mod::nested::private_function();\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! `private_function`은 비공개입니다\n" |
| "// my_mod::nested::private_function();\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/mod/visibility.md:120 |
| msgid "" |
| "// Error! `private_nested` is a private module\n" |
| " //my_mod::private_nested::function();\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! `private_nested`는 비공개 모듈입니다\n" |
| "// my_mod::private_nested::function();\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/mod/visibility.md:124 |
| msgid "" |
| "// Error! `private_nested` is a private module\n" |
| " //my_mod::private_nested::restricted_function();\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! `private_nested`는 비공개 모듈입니다\n" |
| "// my_mod::private_nested::restricted_function();\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/mod/struct_visibility.md:3 |
| msgid "" |
| "Structs have an extra level of visibility with their fields. The visibility " |
| "defaults to private, and can be overridden with the `pub` modifier. This " |
| "visibility only matters when a struct is accessed from outside the module " |
| "where it is defined, and has the goal of hiding information (encapsulation)." |
| msgstr "" |
| "구조체는 필드에 대해 추가적인 수준의 가시성을 가집니다. 가시성은 기본적으로 " |
| "비공개이며, `pub` 수식어로 재정의할 수 있습니다. 이 가시성은 구조체가 정의된 " |
| "모듈 외부에서 접근할 때만 의미가 있으며, 정보를 숨기는 것(캡슐화)이 목적입니" |
| "다." |
| |
| #: src/mod/struct_visibility.md:10 |
| msgid "// A public struct with a public field of generic type `T`\n" |
| msgstr "// 제네릭 타입 `T`의 공개 필드를 가진 공개 구조체\n" |
| |
| #: src/mod/struct_visibility.md:15 |
| msgid "// A public struct with a private field of generic type `T`\n" |
| msgstr "// 제네릭 타입 `T`의 비공개 필드를 가진 공개 구조체\n" |
| |
| #: src/mod/struct_visibility.md:21 |
| msgid "// A public constructor method\n" |
| msgstr "// 공개 생성자 메서드\n" |
| |
| #: src/mod/struct_visibility.md:31 |
| msgid "// Public structs with public fields can be constructed as usual\n" |
| msgstr "// 공개 필드를 가진 공개 구조체는 평소처럼 생성할 수 있습니다\n" |
| |
| #: src/mod/struct_visibility.md:32 |
| msgid "\"public information\"" |
| msgstr "\"공개 정보\"" |
| |
| #: src/mod/struct_visibility.md:34 |
| msgid "// and their fields can be normally accessed.\n" |
| msgstr "// 그리고 그 필드들에 정상적으로 접근할 수 있습니다.\n" |
| |
| #: src/mod/struct_visibility.md:35 |
| msgid "\"The open box contains: {}\"" |
| msgstr "\"열린 박스 내용물: {}\"" |
| |
| #: src/mod/struct_visibility.md:37 |
| msgid "" |
| "// Public structs with private fields cannot be constructed using field " |
| "names.\n" |
| " // Error! `ClosedBox` has private fields\n" |
| " //let closed_box = my::ClosedBox { contents: \"classified " |
| "information\" };\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 비공개 필드를 가진 공개 구조체는 필드 이름을 사용하여 생성할 수 없습니" |
| "다.\n" |
| "// 에러! `ClosedBox`에 비공개 필드가 있습니다\n" |
| "// let closed_box = my::ClosedBox { contents: \"classified information\" };\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/mod/struct_visibility.md:42 |
| msgid "" |
| "// However, structs with private fields can be created using\n" |
| " // public constructors\n" |
| msgstr "" |
| "// 하지만 비공개 필드를 가진 구조체는 공개 생성자를 통해 생성할 수 있습니다\n" |
| |
| #: src/mod/struct_visibility.md:44 |
| msgid "\"classified information\"" |
| msgstr "\"기밀 정보\"" |
| |
| #: src/mod/struct_visibility.md:46 |
| msgid "" |
| "// and the private fields of a public struct cannot be accessed.\n" |
| " // Error! The `contents` field is private\n" |
| " //println!(\"The closed box contains: {}\", _closed_box.contents);\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 그리고 공개 구조체의 비공개 필드에는 접근할 수 없습니다.\n" |
| "// 에러! `contents` 필드는 비공개입니다\n" |
| "// println!(\"닫힌 박스 내용물: {}\", _closed_box.contents);\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/mod/struct_visibility.md:55 |
| msgid "[generics](../generics.md) and [methods](../fn/methods.md)" |
| msgstr "[제네릭](../generics.md) 및 [메서드](../fn/methods.md)" |
| |
| #: src/mod/use.md:3 |
| msgid "" |
| "The `use` declaration can be used to bind a full path to a new name, for " |
| "easier access. It is often used like this:" |
| msgstr "" |
| "`use` 선언을 사용하여 전체 경로를 새로운 이름에 바인딩하여 더 쉽게 접근할 수 " |
| "있습니다. 다음과 같이 자주 사용됩니다:" |
| |
| #: src/mod/use.md:18 |
| msgid "You can use the `as` keyword to bind imports to a different name:" |
| msgstr "" |
| "`as` 키워드를 사용하여 임포트(imports)를 다른 이름에 바인딩할 수 있습니다:" |
| |
| #: src/mod/use.md:21 |
| msgid "// Bind the `deeply::nested::function` path to `other_function`.\n" |
| msgstr "" |
| "// `deeply::nested::function` 경로를 `other_function`에 바인딩합니다.\n" |
| |
| #: src/mod/use.md:31 |
| msgid "\"called `deeply::nested::function()`\"" |
| msgstr "\"`deeply::nested::function()` 호출됨\"" |
| |
| #: src/mod/use.md:37 |
| msgid "// Easier access to `deeply::nested::function`\n" |
| msgstr "// `deeply::nested::function`에 더 쉽게 접근\n" |
| |
| #: src/mod/use.md:40 |
| msgid "\"Entering block\"" |
| msgstr "\"블록 진입\"" |
| |
| #: src/mod/use.md:42 |
| msgid "" |
| "// This is equivalent to `use deeply::nested::function as function`.\n" |
| " // This `function()` will shadow the outer one.\n" |
| msgstr "" |
| "// 이는 `use deeply::nested::function as function`과 동일합니다.\n" |
| "// 이 `function()`은 외부의 것을 섀도잉합니다.\n" |
| |
| #: src/mod/use.md:46 |
| msgid "" |
| "// `use` bindings have a local scope. In this case, the\n" |
| " // shadowing of `function()` is only in this block.\n" |
| msgstr "" |
| "// `use` 바인딩은 지역 스코프를 가집니다. 이 경우\n" |
| "// `function()`의 섀도잉은 이 블록 내에서만 유효합니다.\n" |
| |
| #: src/mod/use.md:50 |
| msgid "\"Leaving block\"" |
| msgstr "\"블록 나감\"" |
| |
| #: src/mod/super.md:3 |
| msgid "" |
| "The `super` and `self` keywords can be used in the path to remove ambiguity " |
| "when accessing items and to prevent unnecessary hardcoding of paths." |
| msgstr "" |
| "`super`와 `self` 키워드는 아이템에 접근할 때 모호함을 제거하고 경로의 불필요" |
| "한 하드코딩을 방지하기 위해 경로 내에서 사용될 수 있습니다." |
| |
| #: src/mod/super.md:13 |
| msgid "\"called `cool::function()`\"" |
| msgstr "\"`cool::function()` 호출됨\"" |
| |
| #: src/mod/super.md:19 src/mod/split.md:49 |
| msgid "\"called `my::function()`\"" |
| msgstr "\"`my::function()` 호출됨\"" |
| |
| #: src/mod/super.md:24 |
| msgid "\"called `my::cool::function()`\"" |
| msgstr "\"`my::cool::function()` 호출됨\"" |
| |
| #: src/mod/super.md:29 |
| msgid "// Let's access all the functions named `function` from this scope!\n" |
| msgstr "// 이 스코프에서 `function`이라는 이름의 모든 함수에 접근해 봅시다!\n" |
| |
| #: src/mod/super.md:30 |
| msgid "\"called `my::indirect_call()`, that\\n> \"" |
| msgstr "\"`my::indirect_call()` 호출됨, 결과는\\n> \"" |
| |
| #: src/mod/super.md:32 |
| msgid "" |
| "// The `self` keyword refers to the current module scope - in this case " |
| "`my`.\n" |
| " // Calling `self::function()` and calling `function()` directly both " |
| "give\n" |
| " // the same result, because they refer to the same function.\n" |
| msgstr "" |
| "// `self` 키워드는 현재 모듈 스코프를 가리킵니다. 이 경우 `my`입니다.\n" |
| "// `self::function()`을 호출하는 것과 `function()`을 직접 호출하는 것은\n" |
| "// 동일한 함수를 가리키기 때문에 같은 결과를 냅니다.\n" |
| |
| #: src/mod/super.md:38 |
| msgid "// We can also use `self` to access another module inside `my`:\n" |
| msgstr "// `self`를 사용하여 `my` 내부의 다른 모듈에 접근할 수도 있습니다:\n" |
| |
| #: src/mod/super.md:41 |
| msgid "" |
| "// The `super` keyword refers to the parent scope (outside the `my` " |
| "module).\n" |
| msgstr "// `super` 키워드는 부모 스코프(`my` 모듈 외부)를 가리킵니다.\n" |
| |
| #: src/mod/super.md:44 |
| msgid "" |
| "// This will bind to the `cool::function` in the *crate* scope.\n" |
| " // In this case the crate scope is the outermost scope.\n" |
| msgstr "" |
| "// 이는 *크레이트* 스코프에 있는 `cool::function`에 바인딩됩니다.\n" |
| "// 이 경우 크레이트 스코프는 가장 바깥쪽 스코프입니다.\n" |
| |
| #: src/mod/split.md:3 |
| msgid "" |
| "Modules can be mapped to a file/directory hierarchy. Let's break down the " |
| "[visibility example](visibility.md) in files:" |
| msgstr "" |
| "모듈은 파일/디렉토리 계층 구조에 매핑될 수 있습니다. [가시성 예제]" |
| "(visibility.md)를 파일별로 나누어 봅시다:" |
| |
| #: src/mod/split.md:16 |
| msgid "In `split.rs`:" |
| msgstr "`split.rs`에서:" |
| |
| #: src/mod/split.md:19 |
| msgid "" |
| "// This declaration will look for a file named `my.rs` and will\n" |
| "// insert its contents inside a module named `my` under this scope\n" |
| msgstr "" |
| "// 이 선언은 `my.rs`라는 파일을 찾아 그 내용을\n" |
| "// 이 스코프 아래의 `my`라는 이름의 모듈로 삽입할 것입니다\n" |
| |
| #: src/mod/split.md:39 |
| msgid "In `my.rs`:" |
| msgstr "`my.rs`에서:" |
| |
| #: src/mod/split.md:42 |
| msgid "" |
| "// Similarly `mod inaccessible` and `mod nested` will locate the " |
| "`nested.rs`\n" |
| "// and `inaccessible.rs` files and insert them here under their respective\n" |
| "// modules\n" |
| msgstr "" |
| "// 마찬가지로 `mod inaccessible`과 `mod nested`는 `nested.rs`와\n" |
| "// `inaccessible.rs` 파일을 찾아 각각의 모듈 아래에\n" |
| "// 삽입할 것입니다\n" |
| |
| #: src/mod/split.md:53 |
| msgid "\"called `my::private_function()`\"" |
| msgstr "\"`my::private_function()` 호출됨\"" |
| |
| #: src/mod/split.md:57 |
| msgid "\"called `my::indirect_access()`, that\\n> \"" |
| msgstr "\"`my::indirect_access()` 호출됨, 결과는\\n> \"" |
| |
| #: src/mod/split.md:63 |
| msgid "In `my/nested.rs`:" |
| msgstr "`my/nested.rs`에서:" |
| |
| #: src/mod/split.md:67 |
| msgid "\"called `my::nested::function()`\"" |
| msgstr "\"`my::nested::function()` 호출됨\"" |
| |
| #: src/mod/split.md:72 |
| msgid "\"called `my::nested::private_function()`\"" |
| msgstr "\"`my::nested::private_function()` 호출됨\"" |
| |
| #: src/mod/split.md:76 |
| msgid "In `my/inaccessible.rs`:" |
| msgstr "`my/inaccessible.rs`에서:" |
| |
| #: src/mod/split.md:81 |
| msgid "\"called `my::inaccessible::public_function()`\"" |
| msgstr "\"`my::inaccessible::public_function()` 호출됨\"" |
| |
| #: src/mod/split.md:85 |
| msgid "Let's check that things still work as before:" |
| msgstr "모든 것이 이전과 같이 여전히 잘 작동하는지 확인해 봅시다:" |
| |
| #: src/crates.md:3 |
| msgid "" |
| "A crate is a compilation unit in Rust. Whenever `rustc some_file.rs` is " |
| "called, `some_file.rs` is treated as the _crate file_. If `some_file.rs` has " |
| "`mod` declarations in it, then the contents of the module files would be " |
| "inserted in places where `mod` declarations in the crate file are found, " |
| "_before_ running the compiler over it. In other words, modules do _not_ get " |
| "compiled individually, only crates get compiled." |
| msgstr "" |
| "크레이트(crate)는 Rust의 컴파일 단위입니다. `rustc some_file.rs`가 호출될 때" |
| "마다 `some_file.rs`는 _크레이트 파일_로 처리됩니다. 만약 `some_file.rs` 내부" |
| "에 `mod` 선언이 있다면, 컴파일러가 실행되기 _전_에 크레이트 파일에서 `mod` 선" |
| "언이 발견된 위치에 모듈 파일의 내용이 삽입됩니다. 즉, 모듈은 개별적으로 컴파" |
| "일되지 않으며 오직 크레이트만 컴파일됩니다." |
| |
| #: src/crates.md:10 |
| msgid "" |
| "A crate can be compiled into a binary or into a library. By default, `rustc` " |
| "will produce a binary from a crate. This behavior can be overridden by " |
| "passing the `--crate-type` flag to `lib`." |
| msgstr "" |
| "크레이트는 바이너리 또는 라이브러리로 컴파일될 수 있습니다. 기본적으로 " |
| "`rustc`는 크레이트로부터 바이너리를 생성합니다. 이 동작은 `--crate-type` 플래" |
| "그에 `lib`을 전달하여 재정의할 수 있습니다." |
| |
| #: src/crates/lib.md:3 |
| msgid "Let's create a library, and then see how to link it to another crate." |
| msgstr "" |
| "라이브러리를 만든 다음, 이를 다른 크레이트와 어떻게 연결하는지 살펴봅시다." |
| |
| #: src/crates/lib.md:5 |
| msgid "In `rary.rs`:" |
| msgstr "`rary.rs`에서:" |
| |
| #: src/crates/lib.md:9 src/attribute/crate.md:19 |
| msgid "\"called rary's `public_function()`\"" |
| msgstr "rary의 `public_function()` 호출됨" |
| |
| #: src/crates/lib.md:13 src/attribute/crate.md:23 |
| msgid "\"called rary's `private_function()`\"" |
| msgstr "rary의 `private_function()` 호출됨" |
| |
| #: src/crates/lib.md:17 src/attribute/crate.md:27 |
| msgid "\"called rary's `indirect_access()`, that\\n> \"" |
| msgstr "rary의 `indirect_access()` 호출됨, 결과는\\n> \"" |
| |
| #: src/crates/lib.md:29 |
| msgid "" |
| "Libraries get prefixed with \"lib\", and by default they get named after " |
| "their crate file, but this default name can be overridden by passing the `--" |
| "crate-name` option to `rustc` or by using the [`crate_name` attribute](../" |
| "attribute/crate.md)." |
| msgstr "" |
| "라이브러리에는 \"lib\" 접두사가 붙으며, 기본적으로 크레이트 파일의 이름을 따" |
| "서 명명되지만, 이 기본 이름은 `rustc`에 `--crate-name` 옵션을 전달하거나 " |
| "[`crate_name` 속성](../attribute/crate.md)을 사용하여 재정의할 수 있습니다." |
| |
| #: src/crates/using_lib.md:3 |
| msgid "" |
| "To link a crate to this new library you may use `rustc`'s `--extern` flag. " |
| "All of its items will then be imported under a module named the same as the " |
| "library. This module generally behaves the same way as any other module." |
| msgstr "" |
| "이 새로운 라이브러리에 크레이트를 연결하려면 `rustc`의 `--extern` 플래그를 사" |
| "용할 수 있습니다. 그러면 모든 아이템은 라이브러리와 동일한 이름을 가진 모듈 " |
| "아래로 임포트됩니다. 이 모듈은 일반적으로 다른 모듈과 동일하게 동작합니다." |
| |
| #: src/crates/using_lib.md:8 |
| msgid "" |
| "// extern crate rary; // May be required for Rust 2015 edition or earlier\n" |
| msgstr "" |
| "// extern crate rary; // Rust 2015 에디션 이하에서는 필요할 수 있습니다\n" |
| |
| #: src/crates/using_lib.md:13 |
| msgid "" |
| "// Error! `private_function` is private\n" |
| " //rary::private_function();\n" |
| msgstr "" |
| "// 에러! `private_function`은 비공개입니다\n" |
| "// rary::private_function();\n" |
| |
| #: src/cargo.md:3 |
| msgid "" |
| "`cargo` is the official Rust package management tool. It has lots of really " |
| "useful features to improve code quality and developer velocity! These include" |
| msgstr "" |
| "`cargo`는 Rust 공식 패키지 관리 도구입니다. 코드 품질과 개발 속도를 향상시키" |
| "기 위한 정말 유용한 기능들을 많이 가지고 있습니다! 다음과 같은 기능들이 포함" |
| "됩니다:" |
| |
| #: src/cargo.md:6 |
| msgid "" |
| "Dependency management and integration with [crates.io](https://crates.io) " |
| "(the official Rust package registry)" |
| msgstr "" |
| "[crates.io](https://crates.io) (공식 Rust 패키지 레지스트리)와의 통합 및 의존" |
| "성 관리" |
| |
| #: src/cargo.md:8 |
| msgid "Awareness of unit tests" |
| msgstr "유닛 테스트 지원" |
| |
| #: src/cargo.md:9 |
| msgid "Awareness of benchmarks" |
| msgstr "벤치마크 지원" |
| |
| #: src/cargo.md:11 |
| msgid "" |
| "This chapter will go through some quick basics, but you can find the " |
| "comprehensive docs in [The Cargo Book](https://doc.rust-lang.org/cargo/)." |
| msgstr "" |
| "이 장에서는 기본적인 사항들을 빠르게 살펴볼 것입니다. 더 자세한 문서는 [The " |
| "Cargo Book](https://doc.rust-lang.org/cargo/)에서 찾을 수 있습니다." |
| |
| #: src/cargo/deps.md:3 |
| msgid "" |
| "Most programs have dependencies on some libraries. If you have ever managed " |
| "dependencies by hand, you know how much of a pain this can be. Luckily, the " |
| "Rust ecosystem comes standard with `cargo`! `cargo` can manage dependencies " |
| "for a project." |
| msgstr "" |
| "대부분의 프로그램은 일부 라이브러리에 의존성을 가집니다. 의존성을 수동으로 관" |
| "리해 본 적이 있다면 그것이 얼마나 고통스러운 일인지 알 것입니다. 다행히도 " |
| "Rust 생태계에는 `cargo`가 표준으로 포함되어 있습니다! `cargo`는 프로젝트의 의" |
| "존성을 관리할 수 있습니다." |
| |
| #: src/cargo/deps.md:8 |
| msgid "To create a new Rust project," |
| msgstr "새로운 Rust 프로젝트를 만들려면," |
| |
| #: src/cargo/deps.md:11 |
| msgid "# A binary\n" |
| msgstr "# 바이너리\n" |
| |
| #: src/cargo/deps.md:13 |
| msgid "# A library\n" |
| msgstr "# 라이브러리\n" |
| |
| #: src/cargo/deps.md:18 |
| msgid "" |
| "For the rest of this chapter, let's assume we are making a binary, rather " |
| "than a library, but all of the concepts are the same." |
| msgstr "" |
| "이 장의 나머지 부분에서는 라이브러리가 아닌 바이너리를 만든다고 가정하겠습니" |
| "다. 하지만 모든 개념은 동일합니다." |
| |
| #: src/cargo/deps.md:21 |
| msgid "After the above commands, you should see a file hierarchy like this:" |
| msgstr "" |
| "위의 명령어를 실행한 후에는 다음과 같은 파일 계층 구조를 보게 될 것입니다:" |
| |
| #: src/cargo/deps.md:35 |
| msgid "" |
| "The `main.rs` is the root source file for your new `foo` project -- nothing " |
| "new there. The `Cargo.toml` is the config file for `cargo` for this project. " |
| "If you look inside it, you should see something like this:" |
| msgstr "" |
| "`main.rs`는 새로운 `foo` 프로젝트의 루트 소스 파일입니다. 특별할 것은 없습니" |
| "다. `Cargo.toml`은 이 프로젝트에 대한 `cargo` 설정 파일입니다. 그 안을 들여다" |
| "보면 다음과 같은 내용을 볼 수 있을 것입니다:" |
| |
| #: src/cargo/deps.md:39 |
| msgid "" |
| "```toml\n" |
| "[package]\n" |
| "name = \"foo\"\n" |
| "version = \"0.1.0\"\n" |
| "authors = [\"mark\"]\n" |
| "\n" |
| "[dependencies]\n" |
| "```" |
| msgstr "" |
| "```toml\n" |
| "[package]\n" |
| "name = \"foo\"\n" |
| "version = \"0.1.0\"\n" |
| "authors = [\"mark\"]\n" |
| "\n" |
| "[dependencies]\n" |
| "```" |
| |
| #: src/cargo/deps.md:48 |
| msgid "" |
| "The `name` field under `[package]` determines the name of the project. This " |
| "is used by `crates.io` if you publish the crate (more later). It is also the " |
| "name of the output binary when you compile." |
| msgstr "" |
| "`[package]` 아래의 `name` 필드는 프로젝트의 이름을 결정합니다. 이는 크레이트" |
| "를 배포할 때(나중에 자세히 설명함) `crates.io`에서 사용됩니다. 또한 컴파일할 " |
| "때 생성되는 바이너리의 이름이기도 합니다." |
| |
| #: src/cargo/deps.md:52 |
| msgid "" |
| "The `version` field is a crate version number using [Semantic Versioning]" |
| "(http://semver.org/)." |
| msgstr "" |
| "`version` 필드는 [유의적 버전(Semantic Versioning)](http://semver.org/)을 사" |
| "용하는 크레이트 버전 번호입니다." |
| |
| #: src/cargo/deps.md:55 |
| msgid "" |
| "The `authors` field is a list of authors used when publishing the crate." |
| msgstr "`authors` 필드는 크레이트를 배포할 때 사용되는 작성자 목록입니다." |
| |
| #: src/cargo/deps.md:57 |
| msgid "" |
| "The `[dependencies]` section lets you add dependencies for your project." |
| msgstr "" |
| "`[dependencies]` 섹션에서는 프로젝트에 필요한 의존성을 추가할 수 있습니다." |
| |
| #: src/cargo/deps.md:59 |
| msgid "" |
| "For example, suppose that we want our program to have a great CLI. You can " |
| "find lots of great packages on [crates.io](https://crates.io) (the official " |
| "Rust package registry). One popular choice is [clap](https://crates.io/" |
| "crates/clap). As of this writing, the most recent published version of " |
| "`clap` is `2.27.1`. To add a dependency to our program, we can simply add " |
| "the following to our `Cargo.toml` under `[dependencies]`: `clap = " |
| "\"2.27.1\"`. And that's it! You can start using `clap` in your program." |
| msgstr "" |
| "예를 들어, 우리 프로그램이 멋진 CLI를 갖기를 원한다고 가정해 봅시다. " |
| "[crates.io](https://crates.io) (공식 Rust 패키지 레지스트리)에서 훌륭한 패키" |
| "지들을 많이 찾을 수 있습니다. 인기 있는 선택지 중 하나는 [clap](https://" |
| "crates.io/crates/clap)입니다. 이 글을 쓰는 시점에서 `clap`의 최신 버전은 " |
| "`2.27.1`입니다. 프로그램에 의존성을 추가하려면 `Cargo.toml`의 " |
| "`[dependencies]` 아래에 다음과 같이 추가하면 됩니다: `clap = \"2.27.1\"`. 이" |
| "것으로 끝입니다! 이제 프로그램에서 `clap`을 사용할 수 있습니다." |
| |
| #: src/cargo/deps.md:67 |
| msgid "" |
| "`cargo` also supports [other types of dependencies](https://doc.rust-" |
| "lang.org/cargo/reference/specifying-dependencies.html). Here is just a small " |
| "sampling:" |
| msgstr "" |
| "`cargo`는 [다른 유형의 의존성](https://doc.rust-lang.org/cargo/reference/" |
| "specifying-dependencies.html)도 지원합니다. 다음은 몇 가지 예시입니다:" |
| |
| #: src/cargo/deps.md:70 |
| msgid "" |
| "```toml\n" |
| "[package]\n" |
| "name = \"foo\"\n" |
| "version = \"0.1.0\"\n" |
| "authors = [\"mark\"]\n" |
| "\n" |
| "[dependencies]\n" |
| "clap = \"2.27.1\" # from crates.io\n" |
| "rand = { git = \"https://github.com/rust-lang-nursery/rand\" } # from online " |
| "repo\n" |
| "bar = { path = \"../bar\" } # from a path in the local filesystem\n" |
| "```" |
| msgstr "" |
| "```toml\n" |
| "[package]\n" |
| "name = \"foo\"\n" |
| "version = \"0.1.0\"\n" |
| "authors = [\"mark\"]\n" |
| "\n" |
| "[dependencies]\n" |
| "clap = \"2.27.1\" # crates.io에서\n" |
| "rand = { git = \"https://github.com/rust-lang-nursery/rand\" } # 온라인 저장" |
| "소에서\n" |
| "bar = { path = \"../bar\" } # 로컬 파일시스템의 경로에서\n" |
| "```" |
| |
| #: src/cargo/deps.md:82 |
| msgid "" |
| "`cargo` is more than a dependency manager. All of the available " |
| "configuration options are listed in the [format specification](https://" |
| "doc.rust-lang.org/cargo/reference/manifest.html) of `Cargo.toml`." |
| msgstr "" |
| "`cargo`는 단순한 의존성 관리자 그 이상입니다. 사용 가능한 모든 설정 옵션은 " |
| "`Cargo.toml`의 [형식 명세(format specification)](https://doc.rust-lang.org/" |
| "cargo/reference/manifest.html)에 나열되어 있습니다." |
| |
| #: src/cargo/deps.md:86 |
| msgid "" |
| "To build our project we can execute `cargo build` anywhere in the project " |
| "directory (including subdirectories!). We can also do `cargo run` to build " |
| "and run. Notice that these commands will resolve all dependencies, download " |
| "crates if needed, and build everything, including your crate. (Note that it " |
| "only rebuilds what it has not already built, similar to `make`)." |
| msgstr "" |
| "프로젝트를 빌드하려면 프로젝트 디렉토리 어디에서나(하위 디렉토리 포함!) " |
| "`cargo build`를 실행하면 됩니다. 또한 `cargo run`을 통해 빌드와 실행을 동시" |
| "에 할 수도 있습니다. 이 명령어들은 모든 의존성을 해결하고, 필요한 경우 크레이" |
| "트를 다운로드하며, 여러분의 크레이트를 포함한 모든 것을 빌드합니다. (이미 빌" |
| "드된 것은 다시 빌드하지 않으며, 이는 `make`와 유사합니다)." |
| |
| #: src/cargo/deps.md:92 |
| msgid "Voila! That's all there is to it!" |
| msgstr "보세요! 이게 전부입니다!" |
| |
| #: src/cargo/conventions.md:3 |
| msgid "In the previous chapter, we saw the following directory hierarchy:" |
| msgstr "이전 장에서 우리는 다음과 같은 디렉터리 계층 구조를 보았습니다." |
| |
| #: src/cargo/conventions.md:12 |
| msgid "" |
| "Suppose that we wanted to have two binaries in the same project, though. " |
| "What then?" |
| msgstr "" |
| "하지만 같은 프로젝트에 두 개의 바이너리를 두고 싶다면 어떨까요? 그럴 땐 어떻" |
| "게 해야 할까요?" |
| |
| #: src/cargo/conventions.md:15 |
| msgid "" |
| "It turns out that `cargo` supports this. The default binary name is `main`, " |
| "as we saw before, but you can add additional binaries by placing them in a " |
| "`bin/` directory:" |
| msgstr "" |
| "다행히 `cargo`는 이를 지원합니다. 이전에 보았듯이 기본 바이너리 이름은 `main`" |
| "이지만, `bin/` 디렉터리에 추가 바이너리를 배치하여 추가할 수 있습니다." |
| |
| #: src/cargo/conventions.md:28 |
| msgid "" |
| "To tell `cargo` to only compile or run this binary, we just pass `cargo` the " |
| "`--bin my_other_bin` flag, where `my_other_bin` is the name of the binary we " |
| "want to work with." |
| msgstr "" |
| "`cargo`에게 이 바이너리만 컴파일하거나 실행하도록 하려면, `cargo`에 `--bin " |
| "my_other_bin` 플래그를 전달하면 됩니다. 여기서 `my_other_bin`은 작업하려는 바" |
| "이너리의 이름입니다." |
| |
| #: src/cargo/conventions.md:32 |
| msgid "" |
| "In addition to extra binaries, `cargo` supports [more features](https://" |
| "doc.rust-lang.org/cargo/guide/project-layout.html) such as benchmarks, " |
| "tests, and examples." |
| msgstr "" |
| "추가 바이너리 외에도 `cargo`는 벤치마크, 테스트, 예제와 같은 [더 많은 기능]" |
| "(https://doc.rust-lang.org/cargo/guide/project-layout.html)을 지원합니다." |
| |
| #: src/cargo/conventions.md:35 |
| msgid "In the next chapter, we will look more closely at tests." |
| msgstr "다음 장에서는 테스트에 대해 더 자세히 살펴보겠습니다." |
| |
| #: src/cargo/test.md:3 |
| msgid "" |
| "As we know testing is integral to any piece of software! Rust has first-" |
| "class support for unit and integration testing ([see this chapter](https://" |
| "doc.rust-lang.org/book/ch11-00-testing.html) in TRPL)." |
| msgstr "" |
| "우리 모두 알다시피 테스트는 모든 소프트웨어의 필수적인 부분입니다! Rust는 유" |
| "닛 테스트와 통합 테스트를 위한 일류(first-class) 지원을 제공합니다(TRPL의 " |
| "[이 장](https://doc.rust-lang.org/book/ch11-00-testing.html)을 참조하세요)." |
| |
| #: src/cargo/test.md:7 |
| msgid "" |
| "From the testing chapters linked above, we see how to write unit tests and " |
| "integration tests. Organizationally, we can place unit tests in the modules " |
| "they test and integration tests in their own `tests/` directory:" |
| msgstr "" |
| "위에 링크된 테스트 장들에서 유닛 테스트와 통합 테스트를 작성하는 방법을 확인" |
| "할 수 있습니다. 구조적으로 유닛 테스트는 테스트 대상 모듈에 배치하고, 통합 테" |
| "스트는 별도의 `tests/` 디렉터리에 배치할 수 있습니다." |
| |
| #: src/cargo/test.md:22 |
| msgid "" |
| "Each file in `tests` is a separate [integration test](https://doc.rust-" |
| "lang.org/book/ch11-03-test-organization.html#integration-tests), i.e. a test " |
| "that is meant to test your library as if it were being called from a " |
| "dependent crate." |
| msgstr "" |
| "`tests` 내의 각 파일은 별도의 [통합 테스트](https://doc.rust-lang.org/book/" |
| "ch11-03-test-organization.html#integration-tests)입니다. 즉, 의존성 있는 크레" |
| "이트에서 호출되는 것처럼 라이브러리를 테스트하기 위한 것입니다." |
| |
| #: src/cargo/test.md:27 |
| msgid "" |
| "The [Testing](../testing.md) chapter elaborates on the three different " |
| "testing styles: [Unit](../testing/unit_testing.md), [Doc](../testing/" |
| "doc_testing.md), and [Integration](../testing/integration_testing.md)." |
| msgstr "" |
| "[테스트](../testing.md) 장에서는 [유닛(Unit)](../testing/unit_testing.md), " |
| "[문서(Doc)](../testing/doc_testing.md), [통합(Integration)](../testing/" |
| "integration_testing.md)의 세 가지 테스트 스타일에 대해 자세히 설명합니다." |
| |
| #: src/cargo/test.md:30 |
| msgid "`cargo` naturally provides an easy way to run all of your tests!" |
| msgstr "`cargo`는 당연히 모든 테스트를 실행할 수 있는 쉬운 방법을 제공합니다!" |
| |
| #: src/cargo/test.md:36 |
| msgid "You should see output like this:" |
| msgstr "다음과 같은 출력을 볼 수 있을 것입니다:" |
| |
| #: src/cargo/test.md:38 |
| msgid "" |
| "```shell\n" |
| "$ cargo test\n" |
| " Compiling blah v0.1.0 (file:///nobackup/blah)\n" |
| " Finished dev [unoptimized + debuginfo] target(s) in 0.89 secs\n" |
| " Running target/debug/deps/blah-d3b32b97275ec472\n" |
| "\n" |
| "running 4 tests\n" |
| "test test_bar ... ok\n" |
| "test test_baz ... ok\n" |
| "test test_foo_bar ... ok\n" |
| "test test_foo ... ok\n" |
| "\n" |
| "test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out\n" |
| "```" |
| msgstr "" |
| "```shell\n" |
| "$ cargo test\n" |
| " Compiling blah v0.1.0 (file:///nobackup/blah)\n" |
| " Finished dev [unoptimized + debuginfo] target(s) in 0.89 secs\n" |
| " Running target/debug/deps/blah-d3b32b97275ec472\n" |
| "\n" |
| "running 4 tests\n" |
| "test test_bar ... ok\n" |
| "test test_baz ... ok\n" |
| "test test_foo_bar ... ok\n" |
| "test test_foo ... ok\n" |
| "\n" |
| "test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out\n" |
| "``````shell\n" |
| "$ cargo test\n" |
| " Compiling blah v0.1.0 (file:///nobackup/blah)\n" |
| " Finished dev [unoptimized + debuginfo] target(s) in 0.89 secs\n" |
| " Running target/debug/deps/blah-d3b32b97275ec472\n" |
| "\n" |
| "running 4 tests\n" |
| "test test_bar ... ok\n" |
| "test test_baz ... ok\n" |
| "test test_foo_bar ... ok\n" |
| "test test_foo ... ok\n" |
| "\n" |
| "test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out\n" |
| "```" |
| |
| #: src/cargo/test.md:53 |
| msgid "You can also run tests whose name matches a pattern:" |
| msgstr "이름이 패턴과 일치하는 테스트만 실행할 수도 있습니다:" |
| |
| #: src/cargo/test.md:59 |
| msgid "" |
| "```shell\n" |
| "$ cargo test test_foo\n" |
| " Compiling blah v0.1.0 (file:///nobackup/blah)\n" |
| " Finished dev [unoptimized + debuginfo] target(s) in 0.35 secs\n" |
| " Running target/debug/deps/blah-d3b32b97275ec472\n" |
| "\n" |
| "running 2 tests\n" |
| "test test_foo ... ok\n" |
| "test test_foo_bar ... ok\n" |
| "\n" |
| "test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 2 filtered out\n" |
| "```" |
| msgstr "" |
| "```shell\n" |
| "$ cargo test test_foo\n" |
| " Compiling blah v0.1.0 (file:///nobackup/blah)\n" |
| " Finished dev [unoptimized + debuginfo] target(s) in 0.35 secs\n" |
| " Running target/debug/deps/blah-d3b32b97275ec472\n" |
| "\n" |
| "running 2 tests\n" |
| "test test_foo ... ok\n" |
| "test test_foo_bar ... ok\n" |
| "\n" |
| "test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 2 filtered out\n" |
| "```" |
| |
| #: src/cargo/test.md:72 |
| msgid "" |
| "One word of caution: Cargo may run multiple tests concurrently, so make sure " |
| "that they don't race with each other." |
| msgstr "" |
| "한 가지 주의할 점: Cargo는 여러 테스트를 동시에 실행할 수 있으므로 서로 경쟁" |
| "(race)하지 않도록 확인해야 합니다." |
| |
| #: src/cargo/test.md:75 |
| msgid "" |
| "One example of this concurrency causing issues is if two tests output to a " |
| "file, such as below:" |
| msgstr "" |
| "이러한 동시성이 문제를 일으키는 한 가지 예는 아래와 같이 두 테스트가 하나의 " |
| "파일에 출력하는 경우입니다:" |
| |
| #: src/cargo/test.md:81 |
| msgid "// Import the necessary modules\n" |
| msgstr "// 필요한 모듈 가져오기\n" |
| |
| #: src/cargo/test.md:85 |
| msgid "// This test writes to a file\n" |
| msgstr "// 이 테스트는 파일에 씁니다\n" |
| |
| #: src/cargo/test.md:88 src/cargo/test.md:105 |
| msgid "// Opens the file ferris.txt or creates one if it doesn't exist.\n" |
| msgstr "// ferris.txt 파일을 열거나 없으면 생성합니다.\n" |
| |
| #: src/cargo/test.md:92 src/cargo/test.md:109 |
| msgid "\"ferris.txt\"" |
| msgstr "\"ferris.txt\"" |
| |
| #: src/cargo/test.md:93 src/cargo/test.md:110 |
| msgid "\"Failed to open ferris.txt\"" |
| msgstr "\"ferris.txt를 여는 데 실패했습니다\"" |
| |
| #: src/cargo/test.md:95 |
| msgid "// Print \"Ferris\" 5 times.\n" |
| msgstr "// \"Ferris\"를 5번 출력합니다.\n" |
| |
| #: src/cargo/test.md:97 |
| msgid "\"Ferris\\n\"" |
| msgstr "\"Ferris\\n\"" |
| |
| #: src/cargo/test.md:98 src/cargo/test.md:115 |
| msgid "\"Could not write to ferris.txt\"" |
| msgstr "\"ferris.txt에 쓸 수 없습니다\"" |
| |
| #: src/cargo/test.md:102 |
| msgid "// This test tries to write to the same file\n" |
| msgstr "// 이 테스트는 동일한 파일에 쓰기를 시도합니다\n" |
| |
| #: src/cargo/test.md:112 |
| msgid "// Print \"Corro\" 5 times.\n" |
| msgstr "// \"Corro\"를 5번 출력합니다.\n" |
| |
| #: src/cargo/test.md:114 |
| msgid "\"Corro\\n\"" |
| msgstr "\"Corro\\n\"" |
| |
| #: src/cargo/test.md:121 |
| msgid "Although the intent is to get the following:" |
| msgstr "의도는 다음과 같은 결과를 얻는 것이었지만:" |
| |
| #: src/cargo/test.md:137 |
| msgid "What actually gets put into `ferris.txt` is this:" |
| msgstr "`ferris.txt`에 실제로 기록된 내용은 다음과 같습니다:" |
| |
| #: src/cargo/build_scripts.md:3 |
| msgid "" |
| "Sometimes a normal build from `cargo` is not enough. Perhaps your crate " |
| "needs some pre-requisites before `cargo` will successfully compile, things " |
| "like code generation, or some native code that needs to be compiled. To " |
| "solve this problem we have build scripts that Cargo can run." |
| msgstr "" |
| "`cargo`의 일반적인 빌드만으로는 충분하지 않은 경우가 있습니다. 코드 생성이나 " |
| "컴파일되어야 하는 네이티브 코드와 같이 `cargo`가 성공적으로 컴파일되기 전에 " |
| "크레이트가 필요로 하는 전제 조건이 있을 수 있습니다. 이 문제를 해결하기 위해 " |
| "Cargo가 실행할 수 있는 빌드 스크립트가 있습니다." |
| |
| #: src/cargo/build_scripts.md:8 |
| msgid "" |
| "To add a build script to your package it can either be specified in the " |
| "`Cargo.toml` as follows:" |
| msgstr "" |
| "패키지에 빌드 스크립트를 추가하려면 다음과 같이 `Cargo.toml`에 지정할 수 있습" |
| "니다:" |
| |
| #: src/cargo/build_scripts.md:11 |
| msgid "" |
| "```toml\n" |
| "[package]\n" |
| "...\n" |
| "build = \"build.rs\"\n" |
| "```" |
| msgstr "" |
| "```toml\n" |
| "[package]\n" |
| "...\n" |
| "build = \"build.rs\"\n" |
| "```" |
| |
| #: src/cargo/build_scripts.md:17 |
| msgid "" |
| "Otherwise Cargo will look for a `build.rs` file in the project directory by " |
| "default." |
| msgstr "" |
| "그렇지 않으면 Cargo는 기본적으로 프로젝트 디렉토리에서 `build.rs` 파일을 찾습" |
| "니다." |
| |
| #: src/cargo/build_scripts.md:20 |
| msgid "How to use a build script" |
| msgstr "빌드 스크립트 사용 방법" |
| |
| #: src/cargo/build_scripts.md:22 |
| msgid "" |
| "The build script is simply another Rust file that will be compiled and " |
| "invoked prior to compiling anything else in the package. Hence it can be " |
| "used to fulfill pre-requisites of your crate." |
| msgstr "" |
| "빌드 스크립트는 단순히 또 다른 Rust 파일로, 패키지의 다른 어떤 것을 컴파일하" |
| "기 전에 먼저 컴파일되고 호출됩니다. 따라서 크레이트의 전제 조건을 충족시키는 " |
| "데 사용할 수 있습니다." |
| |
| #: src/cargo/build_scripts.md:26 |
| msgid "" |
| "Cargo provides the script with inputs via environment variables [specified " |
| "here](https://doc.rust-lang.org/cargo/reference/environment-" |
| "variables.html#environment-variables-cargo-sets-for-build-scripts) that can " |
| "be used." |
| msgstr "" |
| "Cargo는 스크립트에서 사용할 수 있는 환경 변수([여기에 명시됨](https://" |
| "doc.rust-lang.org/cargo/reference/environment-variables.html#environment-" |
| "variables-cargo-sets-for-build-scripts))를 통해 입력을 제공합니다." |
| |
| #: src/cargo/build_scripts.md:29 |
| msgid "" |
| "The script provides output via stdout. All lines printed are written to " |
| "`target/debug/build/<pkg>/output`. Further, lines prefixed with `cargo:` " |
| "will be interpreted by Cargo directly and hence can be used to define " |
| "parameters for the package's compilation." |
| msgstr "" |
| "스크립트는 stdout을 통해 출력을 제공합니다. 출력된 모든 줄은 `target/debug/" |
| "build/<pkg>/output`에 기록됩니다. 또한, `cargo:`로 시작하는 줄은 Cargo에 의" |
| "해 직접 해석되어 패키지 컴파일을 위한 매개변수를 정의하는 데 사용될 수 있습니" |
| "다." |
| |
| #: src/cargo/build_scripts.md:34 |
| msgid "" |
| "For further specification and examples have a read of the [Cargo " |
| "specification](https://doc.rust-lang.org/cargo/reference/build-scripts.html)." |
| msgstr "" |
| "추가적인 사양과 예제는 [Cargo 사양서](https://doc.rust-lang.org/cargo/" |
| "reference/build-scripts.html)를 읽어보세요." |
| |
| #: src/attribute.md:3 |
| msgid "" |
| "An attribute is metadata applied to some module, crate or item. This " |
| "metadata can be used to/for:" |
| msgstr "" |
| "속성(attribute)은 모듈, 크레이트 또는 아이템에 적용되는 메타데이터입니다. 이 " |
| "메타데이터는 다음과 같은 용도로 사용될 수 있습니다:" |
| |
| #: src/attribute.md:8 |
| msgid "[conditional compilation of code](attribute/cfg.md)" |
| msgstr "코드의 [조건부 컴파일](attribute/cfg.md)" |
| |
| #: src/attribute.md:9 |
| msgid "" |
| "[set crate name, version and type (binary or library)](attribute/crate.md)" |
| msgstr "" |
| "[크레이트 이름, 버전 및 유형(바이너리 또는 라이브러리) 설정](attribute/" |
| "crate.md)" |
| |
| #: src/attribute.md:10 |
| msgid "" |
| "disable [lints](https://en.wikipedia.org/wiki/Lint_%28software%29) (warnings)" |
| msgstr "" |
| "[린트(lints)](https://en.wikipedia.org/wiki/Lint_%28software%29) (경고) 비활" |
| "성화" |
| |
| #: src/attribute.md:11 |
| msgid "enable compiler features (macros, glob imports, etc.)" |
| msgstr "컴파일러 기능(매크로, glob 임포트 등) 활성화" |
| |
| #: src/attribute.md:12 |
| msgid "link to a foreign library" |
| msgstr "외부 라이브러리 링크" |
| |
| #: src/attribute.md:13 |
| msgid "mark functions as unit tests" |
| msgstr "함수를 유닛 테스트로 표시" |
| |
| #: src/attribute.md:14 |
| msgid "mark functions that will be part of a benchmark" |
| msgstr "벤치마크의 일부가 될 함수 표시" |
| |
| #: src/attribute.md:15 |
| msgid "" |
| "[attribute like macros](https://doc.rust-lang.org/book/ch19-06-" |
| "macros.html#attribute-like-macros)" |
| msgstr "" |
| "[속성형 매크로](https://doc.rust-lang.org/book/ch19-06-macros.html#attribute-" |
| "like-macros)" |
| |
| #: src/attribute.md:17 |
| msgid "" |
| "Attributes look like `#[outer_attribute]` or `#![inner_attribute]`, with the " |
| "difference between them being where they apply." |
| msgstr "" |
| "속성은 `#[outer_attribute]` 또는 `#![inner_attribute]`와 같은 형태를 띠며, " |
| "이 둘의 차이점은 적용되는 위치에 있습니다." |
| |
| #: src/attribute.md:20 |
| msgid "" |
| "`#[outer_attribute]` applies to the [item](https://doc.rust-lang.org/stable/" |
| "reference/items.html) immediately following it. Some examples of items are: " |
| "a function, a module declaration, a constant, a structure, an enum. Here is " |
| "an example where attribute `#[derive(Debug)]` applies to the struct " |
| "`Rectangle`:" |
| msgstr "" |
| "`#[outer_attribute]`는 바로 뒤에 오는 [아이템](https://doc.rust-lang.org/" |
| "stable/reference/items.html)에 적용됩니다. 아이템의 예로는 함수, 모듈 선언, " |
| "상수, 구조체, 열거형 등이 있습니다. 다음은 `#[derive(Debug)]` 속성이 " |
| "`Rectangle` 구조체에 적용된 예시입니다:" |
| |
| #: src/attribute.md:34 |
| msgid "" |
| "`#![inner_attribute]` applies to the enclosing [item](https://doc.rust-" |
| "lang.org/stable/reference/items.html) (typically a module or a crate). In " |
| "other words, this attribute is interpreted as applying to the entire scope " |
| "in which it's placed. Here is an example where `#![allow(unused_variables)]` " |
| "applies to the whole crate (if placed in `main.rs`):" |
| msgstr "" |
| "`#![inner_attribute]`는 자신을 감싸고 있는 [아이템](https://doc.rust-" |
| "lang.org/stable/reference/items.html) (주로 모듈이나 크레이트)에 적용됩니다. " |
| "다시 말해, 이 속성은 자신이 위치한 전체 스코프에 적용되는 것으로 해석됩니다. " |
| "다음은 `#![allow(unused_variables)]`가 (`main.rs`에 위치할 경우) 전체 크레이" |
| "트에 적용되는 예시입니다:" |
| |
| #: src/attribute.md:44 |
| msgid "// This would normally warn about an unused variable.\n" |
| msgstr "// 이것은 보통 사용되지 않는 변수에 대해 경고합니다.\n" |
| |
| #: src/attribute.md:48 |
| msgid "Attributes can take arguments with different syntaxes:" |
| msgstr "속성은 다양한 문법으로 인자를 받을 수 있습니다:" |
| |
| #: src/attribute.md:50 |
| msgid "`#[attribute = \"value\"]`" |
| msgstr "`#[attribute = \"value\"]`" |
| |
| #: src/attribute.md:51 |
| msgid "`#[attribute(key = \"value\")]`" |
| msgstr "`#[attribute(key = \"value\")]`" |
| |
| #: src/attribute.md:52 |
| msgid "`#[attribute(value)]`" |
| msgstr "`#[attribute(value)]`" |
| |
| #: src/attribute.md:54 |
| msgid "" |
| "Attributes can have multiple values and can be separated over multiple " |
| "lines, too:" |
| msgstr "속성은 여러 값을 가질 수 있으며 여러 줄에 걸쳐 분리될 수도 있습니다:" |
| |
| #: src/attribute/unused.md:3 |
| msgid "" |
| "The compiler provides a `dead_code` [_lint_](https://en.wikipedia.org/wiki/" |
| "Lint_%28software%29) that will warn about unused functions. An _attribute_ " |
| "can be used to disable the lint." |
| msgstr "" |
| "컴파일러는 사용되지 않는 함수에 대해 경고하는 `dead_code` [_린트(lint)_]" |
| "(https://en.wikipedia.org/wiki/Lint_%28software%29)를 제공합니다. _속성_을 사" |
| "용하여 이 린트를 비활성화할 수 있습니다." |
| |
| #: src/attribute/unused.md:9 |
| msgid "" |
| "// `#[allow(dead_code)]` is an attribute that disables the `dead_code` lint\n" |
| msgstr "" |
| "// `#[allow(dead_code)]`는 `dead_code` 린트를 비활성화하는 속성입니다\n" |
| |
| #: src/attribute/unused.md:14 |
| msgid "// FIXME ^ Add an attribute to suppress the warning\n" |
| msgstr "// FIXME ^ 경고를 억제하기 위해 속성을 추가하세요\n" |
| |
| #: src/attribute/unused.md:22 |
| msgid "" |
| "Note that in real programs, you should eliminate dead code. In these " |
| "examples we'll allow dead code in some places because of the interactive " |
| "nature of the examples." |
| msgstr "" |
| "실제 프로그램에서는 죽은 코드를 제거해야 합니다. 이 예제들에서는 예제의 대화" |
| "형 특성 때문에 일부 장소에서 죽은 코드를 허용할 것입니다." |
| |
| #: src/attribute/crate.md:3 |
| msgid "" |
| "The `crate_type` attribute can be used to tell the compiler whether a crate " |
| "is a binary or a library (and even which type of library), and the " |
| "`crate_name` attribute can be used to set the name of the crate." |
| msgstr "" |
| "`crate_type` 속성은 크레이트가 바이너리인지 라이브러리인지(심지어 어떤 종류" |
| "의 라이브러리인지) 컴파일러에게 알려주는 데 사용될 수 있으며, `crate_name` 속" |
| "성은 크레이트의 이름을 설정하는 데 사용될 수 있습니다." |
| |
| #: src/attribute/crate.md:7 |
| msgid "" |
| "However, it is important to note that both the `crate_type` and `crate_name` " |
| "attributes have **no** effect whatsoever when using Cargo, the Rust package " |
| "manager. Since Cargo is used for the majority of Rust projects, this means " |
| "real-world uses of `crate_type` and `crate_name` are relatively limited." |
| msgstr "" |
| "하지만 Rust 패키지 관리자인 Cargo를 사용할 때는 `crate_type`과 `crate_name` " |
| "속성 모두 **아무런** 효과가 없다는 점에 유의해야 합니다. 대다수의 Rust 프로젝" |
| "트가 Cargo를 사용하므로, `crate_type`과 `crate_name`의 실제 사용은 상대적으" |
| "로 제한적입니다." |
| |
| #: src/attribute/crate.md:13 |
| msgid "// This crate is a library\n" |
| msgstr "// 이 크레이트는 라이브러리입니다\n" |
| |
| #: src/attribute/crate.md:14 |
| msgid "\"lib\"" |
| msgstr "\"lib\"" |
| |
| #: src/attribute/crate.md:14 |
| msgid "// The library is named \"rary\"\n" |
| msgstr "// 라이브러리 이름은 \"rary\"입니다\n" |
| |
| #: src/attribute/crate.md:16 |
| msgid "\"rary\"" |
| msgstr "\"rary\"" |
| |
| #: src/attribute/crate.md:33 |
| msgid "" |
| "When the `crate_type` attribute is used, we no longer need to pass the `--" |
| "crate-type` flag to `rustc`." |
| msgstr "" |
| "`crate_type` 속성이 사용되면, 더 이상 `rustc`에 `--crate-type` 플래그를 전달" |
| "할 필요가 없습니다." |
| |
| #: src/attribute/cfg.md:3 |
| msgid "" |
| "Configuration conditional checks are possible through two different " |
| "operators:" |
| msgstr "설정 조건 검사는 두 가지 다른 연산자를 통해 가능합니다:" |
| |
| #: src/attribute/cfg.md:5 |
| msgid "the `cfg` attribute: `#[cfg(...)]` in attribute position" |
| msgstr "`cfg` 속성: 속성 위치에서의 `#[cfg(...)]`" |
| |
| #: src/attribute/cfg.md:6 |
| msgid "the `cfg!` macro: `cfg!(...)` in boolean expressions" |
| msgstr "`cfg!` 매크로: 불리언 표현식에서의 `cfg!(...)`" |
| |
| #: src/attribute/cfg.md:8 |
| msgid "" |
| "While the former enables conditional compilation, the latter conditionally " |
| "evaluates to `true` or `false` literals allowing for checks at run-time. " |
| "Both utilize identical argument syntax." |
| msgstr "" |
| "전자는 조건부 컴파일을 가능하게 하는 반면, 후자는 조건부로 `true` 또는 " |
| "`false` 리터럴로 평가되어 런타임에 검사를 가능하게 합니다. 둘 다 동일한 인자 " |
| "문법을 사용합니다." |
| |
| #: src/attribute/cfg.md:12 |
| msgid "" |
| "`cfg!`, unlike `#[cfg]`, does not remove any code and only evaluates to true " |
| "or false. For example, all blocks in an if/else expression need to be valid " |
| "when `cfg!` is used for the condition, regardless of what `cfg!` is " |
| "evaluating." |
| msgstr "" |
| "`cfg!`는 `#[cfg]`와 달리 코드를 제거하지 않으며 오직 참 또는 거짓으로만 평가" |
| "됩니다. 예를 들어 `cfg!`가 조건으로 사용될 때, `cfg!`가 무엇으로 평가되든 상" |
| "관없이 if/else 표현식의 모든 블록은 유효해야 합니다." |
| |
| #: src/attribute/cfg.md:15 |
| msgid "// This function only gets compiled if the target OS is linux\n" |
| msgstr "// 이 함수는 대상 OS가 리눅스인 경우에만 컴파일됩니다\n" |
| |
| #: src/attribute/cfg.md:16 src/attribute/cfg.md:22 src/attribute/cfg.md:31 |
| msgid "\"linux\"" |
| msgstr "\"linux\"" |
| |
| #: src/attribute/cfg.md:18 |
| msgid "\"You are running linux!\"" |
| msgstr "\"당신은 리눅스를 사용하고 있습니다!\"" |
| |
| #: src/attribute/cfg.md:20 |
| msgid "" |
| "// And this function only gets compiled if the target OS is *not* linux\n" |
| msgstr "// 그리고 이 함수는 타겟 OS가 리눅스가 *아닌* 경우에만 컴파일됩니다.\n" |
| |
| #: src/attribute/cfg.md:24 |
| msgid "\"You are *not* running linux!\"" |
| msgstr "\"당신은 리눅스를 사용하고 있지 *않습니다*!\"" |
| |
| #: src/attribute/cfg.md:30 |
| msgid "\"Are you sure?\"" |
| msgstr "\"확실한가요?\"" |
| |
| #: src/attribute/cfg.md:32 |
| msgid "\"Yes. It's definitely linux!\"" |
| msgstr "\"네. 확실히 리눅스입니다!\"" |
| |
| #: src/attribute/cfg.md:34 |
| msgid "\"Yes. It's definitely *not* linux!\"" |
| msgstr "\"네. 확실히 리눅스가 *아닙니다*!\"" |
| |
| #: src/attribute/cfg.md:41 |
| msgid "" |
| "[the reference](https://doc.rust-lang.org/reference/" |
| "attributes.html#conditional-compilation), [`cfg!`](https://doc.rust-lang.org/" |
| "std/macro.cfg!.html), and [macros](../macros.md)." |
| msgstr "" |
| "[참조](https://doc.rust-lang.org/reference/" |
| "attributes.html#conditional-compilation), [`cfg!`](https://doc.rust-lang.org/" |
| "std/macro.cfg!.html), 그리고 [매크로](../macros.md)." |
| |
| #: src/attribute/cfg/custom.md:3 |
| msgid "" |
| "Some conditionals like `target_os` are implicitly provided by `rustc`, but " |
| "custom conditionals must be passed to `rustc` using the `--cfg` flag." |
| msgstr "" |
| "`target_os`와 같은 일부 조건은 `rustc`에 의해 암시적으로 제공되지만, 사용자 " |
| "정의 조건은 `--cfg` 플래그를 사용하여 `rustc`에 전달되어야 합니다." |
| |
| #: src/attribute/cfg/custom.md:9 |
| msgid "\"condition met!\"" |
| msgstr "\"조건 충족!\"" |
| |
| #: src/attribute/cfg/custom.md:17 |
| msgid "Try to run this to see what happens without the custom `cfg` flag." |
| msgstr "사용자 정의 `cfg` 플래그 없이 실행하면 어떻게 되는지 확인해 보세요." |
| |
| #: src/attribute/cfg/custom.md:19 |
| msgid "With the custom `cfg` flag:" |
| msgstr "사용자 정의 `cfg` 플래그 사용 시:" |
| |
| #: src/generics.md:3 |
| msgid "" |
| "_Generics_ is the topic of generalizing types and functionalities to broader " |
| "cases. This is extremely useful for reducing code duplication in many ways, " |
| "but can call for rather involved syntax. Namely, being generic requires " |
| "taking great care to specify over which types a generic type is actually " |
| "considered valid. The simplest and most common use of generics is for type " |
| "parameters." |
| msgstr "" |
| "_제네릭(Generics)_은 타입과 기능을 더 넓은 케이스로 일반화하는 주제입니다. 이" |
| "는 여러 면에서 코드 중복을 줄이는 데 매우 유용하지만, 다소 복잡한 문법을 요" |
| "구할 수 있습니다. 즉, 제네릭이 되려면 제네릭 타입이 실제로 유효한 것으로 간주" |
| "되는 타입을 지정하는 데 세심한 주의가 필요합니다. 제네릭의 가장 간단하고 흔" |
| "한 용도는 타입 파라미터입니다." |
| |
| #: src/generics.md:10 |
| msgid "" |
| "A type parameter is specified as generic by the use of angle brackets and " |
| "upper [camel case](https://en.wikipedia.org/wiki/CamelCase): `<Aaa, " |
| "Bbb, ...>`. \"Generic type parameters\" are typically represented as `<T>`. " |
| "In Rust, \"generic\" also describes anything that accepts one or more " |
| "generic type parameters `<T>`. Any type specified as a generic type " |
| "parameter is generic, and everything else is concrete (non-generic)." |
| msgstr "" |
| "타입 파라미터는 꺾쇠 괄호와 대문자 [카멜 케이스](https://en.wikipedia.org/" |
| "wiki/CamelCase)를 사용하여 제네릭으로 지정됩니다: `<Aaa, Bbb, ...>`. \"제네" |
| "릭 타입 파라미터\"는 일반적으로 `<T>`로 표현됩니다. Rust에서 \"제네릭\"은 하" |
| "나 이상의 제네릭 타입 파라미터 `<T>`를 허용하는 모든 것을 설명하기도 합니다. " |
| "제네릭 타입 파라미터로 지정된 모든 타입은 제네릭이며, 그 외의 모든 것은 구체" |
| "적(비-제네릭)입니다." |
| |
| #: src/generics.md:16 |
| msgid "" |
| "For example, defining a _generic function_ named `foo` that takes an " |
| "argument `T` of any type:" |
| msgstr "" |
| "예를 들어, 모든 타입의 인자 `T`를 취하는 `foo`라는 이름의 _제네릭 함수_를 정" |
| "의하면 다음과 같습니다:" |
| |
| #: src/generics.md:23 |
| msgid "" |
| "Because `T` has been specified as a generic type parameter using `<T>`, it " |
| "is considered generic when used here as `(arg: T)`. This is the case even if " |
| "`T` has previously been defined as a `struct`." |
| msgstr "" |
| "`T`가 `<T>`를 사용하여 제네릭 타입 파라미터로 지정되었으므로, 여기서 `(arg: " |
| "T)`와 같이 사용될 때 제네릭으로 간주됩니다. 이는 `T`가 이전에 `struct`로 정의" |
| "되었더라도 마찬가지입니다." |
| |
| #: src/generics.md:27 |
| msgid "This example shows some of the syntax in action:" |
| msgstr "이 예제는 실제 작동하는 문법의 일부를 보여줍니다:" |
| |
| #: src/generics.md:30 |
| msgid "// A concrete type `A`.\n" |
| msgstr "// 구체적인 타입 `A`.\n" |
| |
| #: src/generics.md:32 |
| msgid "" |
| "// In defining the type `Single`, the first use of `A` is not preceded by " |
| "`<A>`.\n" |
| "// Therefore, `Single` is a concrete type, and `A` is defined as above.\n" |
| msgstr "" |
| "// `Single` 타입을 정의할 때, `A`의 첫 사용 앞에 `<A>`가 붙지 않습니다.\n" |
| "// 따라서 `Single`은 구체적인 타입이며, `A`는 위에서 정의된 대로입니다.\n" |
| |
| #: src/generics.md:35 |
| msgid "// ^ Here is `Single`s first use of the type `A`.\n" |
| msgstr "// ^ 여기서 `Single`이 처음으로 `A` 타입을 사용합니다.\n" |
| |
| #: src/generics.md:37 |
| msgid "" |
| "// Here, `<T>` precedes the first use of `T`, so `SingleGen` is a generic " |
| "type.\n" |
| "// Because the type parameter `T` is generic, it could be anything, " |
| "including\n" |
| "// the concrete type `A` defined at the top.\n" |
| msgstr "" |
| "// 여기서 `<T>`가 `T`의 첫 사용 앞에 오므로, `SingleGen`은 제네릭 타입입니" |
| "다.\n" |
| "// 타입 파라미터 `T`는 제네릭이므로, 상단에서 정의된 구체적인 타입 `A`를 포함" |
| "하여\n" |
| "// 무엇이든 될 수 있습니다.\n" |
| |
| #: src/generics.md:44 |
| msgid "// `Single` is concrete and explicitly takes `A`.\n" |
| msgstr "// `Single`은 구체적이며 명시적으로 `A`를 취합니다.\n" |
| |
| #: src/generics.md:47 |
| msgid "" |
| "// Create a variable `_char` of type `SingleGen<char>`\n" |
| " // and give it the value `SingleGen('a')`.\n" |
| " // Here, `SingleGen` has a type parameter explicitly specified.\n" |
| msgstr "" |
| "// `SingleGen<char>` 타입의 변수 `_char`를 생성하고\n" |
| " // `SingleGen('a')` 값을 줍니다.\n" |
| " // 여기서 `SingleGen`은 타입 파라미터가 명시적으로 지정되었습니다.\n" |
| |
| #: src/generics.md:52 |
| msgid "// `SingleGen` can also have a type parameter implicitly specified:\n" |
| msgstr "// `SingleGen`은 타입 파라미터를 암시적으로 지정할 수도 있습니다:\n" |
| |
| #: src/generics.md:53 |
| msgid "// Uses `A` defined at the top.\n" |
| msgstr "// 상단에서 정의된 `A`를 사용합니다.\n" |
| |
| #: src/generics.md:54 |
| msgid "// Uses `i32`.\n" |
| msgstr "// `i32`를 사용합니다.\n" |
| |
| #: src/generics.md:55 |
| msgid "// Uses `char`.\n" |
| msgstr "// `char`를 사용합니다.\n" |
| |
| #: src/generics.md:61 |
| msgid "[`structs`](custom_types/structs.md)" |
| msgstr "[`구조체`](custom_types/structs.md)" |
| |
| #: src/generics/gen_fn.md:3 |
| msgid "" |
| "The same set of rules can be applied to functions: a type `T` becomes " |
| "generic when preceded by `<T>`." |
| msgstr "" |
| "함수에도 동일한 규칙이 적용될 수 있습니다: 타입 `T` 앞에 `<T>`가 붙으면 제네" |
| "릭이 됩니다." |
| |
| #: src/generics/gen_fn.md:6 |
| msgid "" |
| "Using generic functions sometimes requires explicitly specifying type " |
| "parameters. This may be the case if the function is called where the return " |
| "type is generic, or if the compiler doesn't have enough information to infer " |
| "the necessary type parameters." |
| msgstr "" |
| "제네릭 함수를 사용할 때 때로는 타입 파라미터를 명시적으로 지정해야 할 필요가 " |
| "있습니다. 반환 타입이 제네릭인 곳에서 함수가 호출되거나, 컴파일러가 필요한 타" |
| "입 파라미터를 추론하기에 충분한 정보를 가지고 있지 않은 경우가 이에 해당할 " |
| "수 있습니다." |
| |
| #: src/generics/gen_fn.md:11 |
| msgid "" |
| "A function call with explicitly specified type parameters looks like: `fun::" |
| "<A, B, ...>()`." |
| msgstr "" |
| "명시적으로 지정된 타입 파라미터를 사용한 함수 호출은 다음과 같습니다: `fun::" |
| "<A, B, ...>()`." |
| |
| #: src/generics/gen_fn.md:15 |
| msgid "// Concrete type `A`.\n" |
| msgstr "// 구체적인 타입 `A`.\n" |
| |
| #: src/generics/gen_fn.md:16 |
| msgid "// Concrete type `S`.\n" |
| msgstr "// 구체적인 타입 `S`.\n" |
| |
| #: src/generics/gen_fn.md:17 |
| msgid "// Generic type `SGen`.\n" |
| msgstr "// 제네릭 타입 `SGen`.\n" |
| |
| #: src/generics/gen_fn.md:18 |
| msgid "" |
| "// The following functions all take ownership of the variable passed into\n" |
| "// them and immediately go out of scope, freeing the variable.\n" |
| msgstr "" |
| "// 다음 함수들은 모두 전달된 변수의 소유권을 가져가며,\n" |
| "// 즉시 스코프를 벗어나 변수를 해제합니다.\n" |
| |
| #: src/generics/gen_fn.md:21 |
| msgid "" |
| "// Define a function `reg_fn` that takes an argument `_s` of type `S`.\n" |
| "// This has no `<T>` so this is not a generic function.\n" |
| msgstr "" |
| "// `S` 타입의 인자 `_s`를 받는 `reg_fn` 함수를 정의합니다.\n" |
| "// `<T>`가 없으므로 이것은 제네릭 함수가 아닙니다.\n" |
| |
| #: src/generics/gen_fn.md:25 |
| msgid "" |
| "// Define a function `gen_spec_t` that takes an argument `_s` of type " |
| "`SGen<T>`.\n" |
| "// It has been explicitly given the type parameter `A`, but because `A` has " |
| "not\n" |
| "// been specified as a generic type parameter for `gen_spec_t`, it is not " |
| "generic.\n" |
| msgstr "" |
| "// `SGen<T>` 타입의 인자 `_s`를 받는 `gen_spec_t` 함수를 정의합니다.\n" |
| "// 타입 파라미터 `A`가 명시적으로 주어졌지만, `A`가 `gen_spec_t`의\n" |
| "// 제네릭 타입 파라미터로 지정되지 않았으므로, 이것은 제네릭이 아닙니다.\n" |
| |
| #: src/generics/gen_fn.md:30 |
| msgid "" |
| "// Define a function `gen_spec_i32` that takes an argument `_s` of type " |
| "`SGen<i32>`.\n" |
| "// It has been explicitly given the type parameter `i32`, which is a " |
| "specific type.\n" |
| "// Because `i32` is not a generic type, this function is also not generic.\n" |
| msgstr "" |
| "// `SGen<i32>` 타입의 인자 `_s`를 받는 `gen_spec_i32` 함수를 정의합니다.\n" |
| "// 구체적인 타입인 `i32`가 타입 파라미터로 명시적으로 주어졌습니다.\n" |
| "// `i32`는 제네릭 타입이 아니므로, 이 함수 또한 제네릭이 아닙니다.\n" |
| |
| #: src/generics/gen_fn.md:35 |
| msgid "" |
| "// Define a function `generic` that takes an argument `_s` of type " |
| "`SGen<T>`.\n" |
| "// Because `SGen<T>` is preceded by `<T>`, this function is generic over " |
| "`T`.\n" |
| msgstr "" |
| "// `SGen<T>` 타입의 인자 `_s`를 받는 `generic` 함수를 정의합니다.\n" |
| "// `SGen<T>` 앞에 `<T>`가 오기 때문에, 이 함수는 `T`에 대해 제네릭입니다.\n" |
| |
| #: src/generics/gen_fn.md:41 |
| msgid "// Using the non-generic functions\n" |
| msgstr "// 제네릭이 아닌 함수들 사용\n" |
| |
| #: src/generics/gen_fn.md:42 |
| msgid "// Concrete type.\n" |
| msgstr "// 구체적인 타입.\n" |
| |
| #: src/generics/gen_fn.md:43 |
| msgid "// Implicitly specified type parameter `A`.\n" |
| msgstr "// 암시적으로 지정된 타입 파라미터 `A`.\n" |
| |
| #: src/generics/gen_fn.md:44 |
| msgid "// Implicitly specified type parameter `i32`.\n" |
| msgstr "// 암시적으로 지정된 타입 파라미터 `i32`.\n" |
| |
| #: src/generics/gen_fn.md:46 |
| msgid "// Explicitly specified type parameter `char` to `generic()`.\n" |
| msgstr "// `generic()`에 명시적으로 지정된 타입 파라미터 `char`.\n" |
| |
| #: src/generics/gen_fn.md:49 |
| msgid "// Implicitly specified type parameter `char` to `generic()`.\n" |
| msgstr "// `generic()`에 암시적으로 지정된 타입 파라미터 `char`.\n" |
| |
| #: src/generics/gen_fn.md:50 |
| msgid "'c'" |
| msgstr "'c'" |
| |
| #: src/generics/gen_fn.md:56 |
| msgid "[functions](../fn.md) and [`struct`s](../custom_types/structs.md)" |
| msgstr "[함수](../fn.md)와 [`struct`](../custom_types/structs.md)" |
| |
| #: src/generics/impl.md:3 |
| msgid "Similar to functions, implementations require care to remain generic." |
| msgstr "" |
| "함수와 마찬가지로, 구현(implementation)도 제네릭을 유지하기 위해 주의가 필요" |
| "합니다." |
| |
| #: src/generics/impl.md:6 |
| msgid "// Concrete type `S`\n" |
| msgstr "// 구체적인 타입 `S`\n" |
| |
| #: src/generics/impl.md:7 |
| msgid "// Generic type `GenericVal`\n" |
| msgstr "// 제네릭 타입 `GenericVal`\n" |
| |
| #: src/generics/impl.md:8 |
| msgid "// impl of GenericVal where we explicitly specify type parameters:\n" |
| msgstr "// 타입 파라미터를 명시적으로 지정한 GenericVal의 구현:\n" |
| |
| #: src/generics/impl.md:10 |
| msgid "// Specify `f32`\n" |
| msgstr "// `f32` 지정\n" |
| |
| #: src/generics/impl.md:11 |
| msgid "// Specify `S` as defined above\n" |
| msgstr "// 위에서 정의한 `S` 지정\n" |
| |
| #: src/generics/impl.md:12 |
| msgid "// `<T>` Must precede the type to remain generic\n" |
| msgstr "// 제네릭을 유지하려면 `<T>`가 타입 앞에 와야 합니다\n" |
| |
| #: src/generics/impl.md:25 |
| msgid "// impl of Val\n" |
| msgstr "// Val 구현\n" |
| |
| #: src/generics/impl.md:32 |
| msgid "// impl of GenVal for a generic type `T`\n" |
| msgstr "// 제네릭 타입 `T`에 대한 GenVal 구현\n" |
| |
| #: src/generics/impl.md:50 |
| msgid "" |
| "[functions returning references](../scope/lifetime/fn.md), [`impl`](../fn/" |
| "methods.md), and [`struct`](../custom_types/structs.md)" |
| msgstr "" |
| "[참조를 반환하는 함수](../scope/lifetime/fn.md), [`impl`](../fn/methods.md), " |
| "그리고 [`struct`](../custom_types/structs.md)" |
| |
| #: src/generics/gen_trait.md:3 |
| msgid "" |
| "Of course `trait`s can also be generic. Here we define one which " |
| "reimplements the `Drop` `trait` as a generic method to `drop` itself and an " |
| "input." |
| msgstr "" |
| "물론 `trait`도 제네릭일 수 있습니다. 여기서는 `Drop` `트레이트`를 자신과 입력" |
| "을 `drop`하는 제네릭 메서드로 재구현한 것을 정의합니다." |
| |
| #: src/generics/gen_trait.md:7 |
| msgid "// Non-copyable types.\n" |
| msgstr "// 복사 불가능한 타입.\n" |
| |
| #: src/generics/gen_trait.md:10 |
| msgid "// A trait generic over `T`.\n" |
| msgstr "// `T`에 대해 제네릭인 트레이트.\n" |
| |
| #: src/generics/gen_trait.md:13 |
| msgid "" |
| "// Define a method on the caller type which takes an\n" |
| " // additional single parameter `T` and does nothing with it.\n" |
| msgstr "" |
| "// 호출자 타입에 대해 추가적인 단일 파라미터 `T`를 취하고\n" |
| "// 아무것도 하지 않는 메서드를 정의합니다.\n" |
| |
| #: src/generics/gen_trait.md:17 |
| msgid "" |
| "// Implement `DoubleDrop<T>` for any generic parameter `T` and\n" |
| "// caller `U`.\n" |
| msgstr "" |
| "// 임의의 제네릭 파라미터 `T`와 호출자 `U`에 대해\n" |
| "// `DoubleDrop<T>`를 구현합니다.\n" |
| |
| #: src/generics/gen_trait.md:21 |
| msgid "" |
| "// This method takes ownership of both passed arguments,\n" |
| " // deallocating both.\n" |
| msgstr "" |
| "// 이 메서드는 전달된 두 인자의 소유권을 가져와\n" |
| "// 둘 다 해제합니다.\n" |
| |
| #: src/generics/gen_trait.md:30 |
| msgid "// Deallocate `empty` and `null`.\n" |
| msgstr "// `empty`와 `null`을 해제합니다.\n" |
| |
| #: src/generics/gen_trait.md:33 |
| msgid "" |
| "//empty;\n" |
| " //null;\n" |
| " // ^ TODO: Try uncommenting these lines.\n" |
| msgstr "" |
| "//empty;\n" |
| " //null;\n" |
| " // ^ TODO: 이 줄들의 주석을 해제해 보세요.\n" |
| |
| #: src/generics/gen_trait.md:41 |
| msgid "" |
| "[`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html), [`struct`](../" |
| "custom_types/structs.md), and [`trait`](../trait.md)" |
| msgstr "" |
| "[`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html), [`구조체`](../" |
| "custom_types/structs.md), 그리고 [`트레이트`](../trait.md)" |
| |
| #: src/generics/bounds.md:3 |
| msgid "" |
| "When working with generics, the type parameters often must use traits as " |
| "_bounds_ to stipulate what functionality a type implements. For example, the " |
| "following example uses the trait `Display` to print and so it requires `T` " |
| "to be bound by `Display`; that is, `T` _must_ implement `Display`." |
| msgstr "" |
| "제네릭을 사용할 때, 타입 파라미터는 종종 타입이 구현해야 하는 기능을 규정하" |
| "기 위해 트레이트를 _바운드(bounds)_로 사용해야 합니다. 예를 들어, 다음 예제" |
| "는 `Display` 트레이트를 사용하여 출력하므로 `T`가 `Display`에 바운드되어야 합" |
| "니다. 즉, `T`는 반드시 `Display`를 구현해야 합니다." |
| |
| #: src/generics/bounds.md:9 |
| msgid "" |
| "// Define a function `printer` that takes a generic type `T` which\n" |
| "// must implement trait `Display`.\n" |
| msgstr "" |
| "// 제네릭 타입 `T`를 받는 함수 `printer`를 정의합니다.\n" |
| "// `T`는 반드시 `Display` 트레이트를 구현해야 합니다.\n" |
| |
| #: src/generics/bounds.md:16 |
| msgid "" |
| "Bounding restricts the generic to types that conform to the bounds. That is:" |
| msgstr "바운딩은 제네릭을 해당 바운드를 준수하는 타입들로 제한합니다. 즉:" |
| |
| #: src/generics/bounds.md:20 |
| msgid "" |
| "// Error! `Vec<T>` does not implement `Display`. This\n" |
| "// specialization will fail.\n" |
| msgstr "" |
| "// 에러! `Vec<T>`는 `Display`를 구현하지 않습니다.\n" |
| "// 이 특수화는 실패할 것입니다.\n" |
| |
| #: src/generics/bounds.md:26 |
| msgid "" |
| "Another effect of bounding is that generic instances are allowed to access " |
| "the [methods](../fn/methods.md) of traits specified in the bounds. For " |
| "example:" |
| msgstr "" |
| "바운딩의 또 다른 효과는 제네릭 인스턴스가 바운드에 지정된 트레이트의 [메서드]" |
| "(../fn/methods.md)에 접근할 수 있게 된다는 것입니다. 예를 들어:" |
| |
| #: src/generics/bounds.md:30 |
| msgid "// A trait which implements the print marker: `{:?}`.\n" |
| msgstr "// 출력 마커 `{:?}`를 구현하는 트레이트입니다.\n" |
| |
| #: src/generics/bounds.md:45 |
| msgid "" |
| "// The generic `T` must implement `Debug`. Regardless\n" |
| "// of the type, this will work properly.\n" |
| msgstr "" |
| "// 제네릭 `T`는 반드시 `Debug`를 구현해야 합니다.\n" |
| "// 타입에 상관없이 이는 제대로 작동할 것입니다.\n" |
| |
| #: src/generics/bounds.md:51 |
| msgid "" |
| "// `T` must implement `HasArea`. Any type which meets\n" |
| "// the bound can access `HasArea`'s function `area`.\n" |
| msgstr "" |
| "// `T`는 반드시 `HasArea`를 구현해야 합니다. 바운드를 충족하는\n" |
| "// 모든 타입은 `HasArea`의 `area` 함수에 접근할 수 있습니다.\n" |
| |
| #: src/generics/bounds.md:61 |
| msgid "\"Area: {}\"" |
| msgstr "\"면적: {}\"" |
| |
| #: src/generics/bounds.md:63 |
| msgid "" |
| "//print_debug(&_triangle);\n" |
| " //println!(\"Area: {}\", area(&_triangle));\n" |
| " // ^ TODO: Try uncommenting these.\n" |
| " // | Error: Does not implement either `Debug` or `HasArea`.\n" |
| msgstr "" |
| "//print_debug(&_triangle);\n" |
| "//println!(\"면적: {}\", area(&_triangle));\n" |
| "// ^ TODO: 이 줄들의 주석을 해제해 보세요.\n" |
| "// | 에러: `Debug`나 `HasArea` 중 어느 것도 구현하지 않았습니다.\n" |
| |
| #: src/generics/bounds.md:70 |
| msgid "" |
| "As an additional note, [`where`](../generics/where.md) clauses can also be " |
| "used to apply bounds in some cases to be more expressive." |
| msgstr "" |
| "추가적으로, 어떤 경우에는 [`where`](../generics/where.md) 절을 사용하여 바운" |
| "드를 더 표현력 있게 적용할 수도 있습니다." |
| |
| #: src/generics/bounds.md:75 |
| msgid "" |
| "[`std::fmt`](../hello/print.md), [`struct`s](../custom_types/structs.md), " |
| "and [`trait`s](../trait.md)" |
| msgstr "" |
| "[`std::fmt`](../hello/print.md), [`struct`](../custom_types/structs.md), 그리" |
| "고 [`trait`](../trait.md)" |
| |
| #: src/generics/bounds/testcase_empty.md:3 |
| msgid "" |
| "A consequence of how bounds work is that even if a `trait` doesn't include " |
| "any functionality, you can still use it as a bound. `Eq` and `Copy` are " |
| "examples of such `trait`s from the `std` library." |
| msgstr "" |
| "바운드가 작동하는 방식의 결과로, `trait`가 아무런 기능을 포함하지 않더라도 여" |
| "전히 바운드로 사용할 수 있습니다. `std` 라이브러리의 `Eq`와 `Copy`가 그러한 " |
| "`trait`의 예입니다." |
| |
| #: src/generics/bounds/testcase_empty.md:17 |
| msgid "" |
| "// These functions are only valid for types which implement these\n" |
| "// traits. The fact that the traits are empty is irrelevant.\n" |
| msgstr "" |
| "// 이 함수들은 이 트레이트들을 구현하는 타입에 대해서만 유효합니다.\n" |
| "// 트레이트가 비어 있다는 사실은 무관합니다.\n" |
| |
| #: src/generics/bounds/testcase_empty.md:20 |
| msgid "\"red\"" |
| msgstr "\"빨강\"" |
| |
| #: src/generics/bounds/testcase_empty.md:21 |
| msgid "\"blue\"" |
| msgstr "\"파랑\"" |
| |
| #: src/generics/bounds/testcase_empty.md:28 |
| msgid "" |
| "// `red()` won't work on a blue jay nor vice versa\n" |
| " // because of the bounds.\n" |
| msgstr "" |
| "// 바운드 때문에 `red()`는 blue jay(파랑 어치)에 대해 작동하지 않으며\n" |
| "// 그 반대도 마찬가지입니다.\n" |
| |
| #: src/generics/bounds/testcase_empty.md:30 |
| msgid "\"A cardinal is {}\"" |
| msgstr "\"홍관조(cardinal)는 {}입니다\"" |
| |
| #: src/generics/bounds/testcase_empty.md:31 |
| msgid "\"A blue jay is {}\"" |
| msgstr "\"파랑 어치(blue jay)는 {}입니다\"" |
| |
| #: src/generics/bounds/testcase_empty.md:32 |
| msgid "" |
| "//println!(\"A turkey is {}\", red(&_turkey));\n" |
| " // ^ TODO: Try uncommenting this line.\n" |
| msgstr "" |
| "//println!(\"칠면조는 {}\", red(&_turkey));\n" |
| "// ^ TODO: 이 줄의 주석을 해제해 보세요.\n" |
| |
| #: src/generics/bounds/testcase_empty.md:39 |
| msgid "" |
| "[`std::cmp::Eq`](https://doc.rust-lang.org/std/cmp/trait.Eq.html), " |
| "[`std::marker::Copy`](https://doc.rust-lang.org/std/marker/trait.Copy.html), " |
| "and [`trait`s](../../trait.md)" |
| msgstr "" |
| "[`std::cmp::Eq`](https://doc.rust-lang.org/std/cmp/trait.Eq.html), " |
| "[`std::marker::Copy`](https://doc.rust-lang.org/std/marker/trait.Copy.html), " |
| "그리고 [`trait`](../../trait.md)" |
| |
| #: src/generics/multi_bounds.md:3 |
| msgid "" |
| "Multiple bounds for a single type can be applied with a `+`. Like normal, " |
| "different types are separated with `,`." |
| msgstr "" |
| "단일 타입에 대해 `+`를 사용하여 다중 바운드를 적용할 수 있습니다. 평소와 마찬" |
| "가지로, 서로 다른 타입은 `,`로 구분됩니다." |
| |
| #: src/generics/multi_bounds.md:10 |
| msgid "\"Debug: `{:?}`\"" |
| msgstr "\"디버그: `{:?}`\"" |
| |
| #: src/generics/multi_bounds.md:11 |
| msgid "\"Display: `{}`\"" |
| msgstr "\"디스플레이: `{}`\"" |
| |
| #: src/generics/multi_bounds.md:15 |
| msgid "\"t: `{:?}`\"" |
| msgstr "\"t: `{:?}`\"" |
| |
| #: src/generics/multi_bounds.md:16 |
| msgid "\"u: `{:?}`\"" |
| msgstr "\"u: `{:?}`\"" |
| |
| #: src/generics/multi_bounds.md:20 |
| msgid "\"words\"" |
| msgstr "\"단어들\"" |
| |
| #: src/generics/multi_bounds.md:25 |
| msgid "" |
| "//compare_prints(&array);\n" |
| " // TODO ^ Try uncommenting this.\n" |
| msgstr "" |
| "//compare_prints(&array);\n" |
| "// TODO ^ 주석을 해제해 보세요.\n" |
| |
| #: src/generics/multi_bounds.md:34 |
| msgid "[`std::fmt`](../hello/print.md) and [`trait`s](../trait.md)" |
| msgstr "[`std::fmt`](../hello/print.md)와 [`trait`](../trait.md)" |
| |
| #: src/generics/where.md:3 |
| msgid "" |
| "A bound can also be expressed using a `where` clause immediately before the " |
| "opening `{`, rather than at the type's first mention. Additionally, `where` " |
| "clauses can apply bounds to arbitrary types, rather than just to type " |
| "parameters." |
| msgstr "" |
| "바운드는 타입이 처음 언급되는 곳이 아닌, 여는 중괄호 `{` 직전에 `where` 절을 " |
| "사용하여 표현할 수도 있습니다. 또한, `where` 절은 타입 파라미터뿐만 아니라 임" |
| "의의 타입에도 바운드를 적용할 수 있습니다." |
| |
| #: src/generics/where.md:8 |
| msgid "Some cases that a `where` clause is useful:" |
| msgstr "`where` 절이 유용한 몇 가지 경우:" |
| |
| #: src/generics/where.md:10 |
| msgid "When specifying generic types and bounds separately is clearer:" |
| msgstr "제네릭 타입과 바운드를 따로 명시하는 것이 더 명확할 때:" |
| |
| #: src/generics/where.md:14 |
| msgid "// Expressing bounds with a `where` clause\n" |
| msgstr "// `where` 절로 바운드 표현하기\n" |
| |
| #: src/generics/where.md:21 |
| msgid "" |
| "When using a `where` clause is more expressive than using normal syntax. The " |
| "`impl` in this example cannot be directly expressed without a `where` clause:" |
| msgstr "" |
| "`where` 절을 사용하는 것이 일반 구문을 사용하는 것보다 더 표현력이 좋을 때. " |
| "이 예제의 `impl`은 `where` 절 없이는 직접 표현할 수 없습니다:" |
| |
| #: src/generics/where.md:30 |
| msgid "" |
| "// Because we would otherwise have to express this as `T: Debug` or\n" |
| "// use another method of indirect approach, this requires a `where` clause:\n" |
| msgstr "" |
| "// 그렇지 않으면 `T: Debug`로 표현하거나\n" |
| "// 다른 간접적인 방법을 사용해야 하므로, 여기에는 `where` 절이 필요합니다:\n" |
| |
| #: src/generics/where.md:35 |
| msgid "" |
| "// We want `Option<T>: Debug` as our bound because that is what's\n" |
| " // being printed. Doing otherwise would be using the wrong bound.\n" |
| msgstr "" |
| "// 출력되는 것이 `Option<T>`이므로, 바운드로 `Option<T>: Debug`를 원합니다.\n" |
| " // 다르게 하면 잘못된 바운드를 사용하는 셈이 됩니다.\n" |
| |
| #: src/generics/where.md:51 |
| msgid "" |
| "[RFC](https://github.com/rust-lang/rfcs/blob/master/text/0135-where.md), " |
| "[`struct`](../custom_types/structs.md), and [`trait`](../trait.md)" |
| msgstr "" |
| "[RFC](https://github.com/rust-lang/rfcs/blob/master/text/0135-where.md), " |
| "[`struct`](../custom_types/structs.md), 그리고 [`trait`](../trait.md)" |
| |
| #: src/generics/new_types.md:3 |
| msgid "" |
| "The `newtype` idiom gives compile time guarantees that the right type of " |
| "value is supplied to a program." |
| msgstr "" |
| "`newtype` 관용구는 프로그램에 올바른 타입의 값이 제공됨을 컴파일 타임에 보장" |
| "해 줍니다." |
| |
| #: src/generics/new_types.md:6 |
| msgid "" |
| "For example, an age verification function that checks age in years, _must_ " |
| "be given a value of type `Years`." |
| msgstr "" |
| "예를 들어, 나이를 연 단위로 확인하는 나이 검증 함수는 반드시 `Years` 타입의 " |
| "값을 받아야 합니다." |
| |
| #: src/generics/new_types.md:21 |
| msgid "/// truncates partial years\n" |
| msgstr "/// 부분적인 연도는 버립니다\n" |
| |
| #: src/generics/new_types.md:34 src/generics/new_types.md:35 |
| msgid "\"Is an adult? {}\"" |
| msgstr "\"성인입니까? {}\"" |
| |
| #: src/generics/new_types.md:36 |
| msgid "// println!(\"Is an adult? {}\", is_adult(&age_days));\n" |
| msgstr "// println!(\"성인입니까? {}\", is_adult(&age_days));\n" |
| |
| #: src/generics/new_types.md:40 |
| msgid "" |
| "Uncomment the last print statement to observe that the type supplied must be " |
| "`Years`." |
| msgstr "" |
| "마지막 출력문의 주석을 해제하여 제공되는 타입이 반드시 `Years`여야 함을 관찰" |
| "해 보세요." |
| |
| #: src/generics/new_types.md:42 |
| msgid "" |
| "To obtain the `newtype`'s value as the base type, you may use the tuple or " |
| "destructuring syntax like so:" |
| msgstr "" |
| "`newtype`의 값을 기본 타입으로 얻으려면, 다음과 같이 튜플 또는 구조 분해 문법" |
| "을 사용할 수 있습니다:" |
| |
| #: src/generics/new_types.md:49 |
| msgid "// Tuple\n" |
| msgstr "// 튜플\n" |
| |
| #: src/generics/new_types.md:50 |
| msgid "// Destructuring\n" |
| msgstr "// 구조 분해\n" |
| |
| #: src/generics/new_types.md:56 |
| msgid "[`structs`](../custom_types/structs.md)" |
| msgstr "[`structs`](../custom_types/structs.md)" |
| |
| #: src/generics/assoc_items.md:3 |
| msgid "" |
| "\"Associated Items\" refers to a set of rules pertaining to [`item`](https://" |
| "doc.rust-lang.org/reference/items.html)s of various types. It is an " |
| "extension to `trait` generics, and allows `trait`s to internally define new " |
| "items." |
| msgstr "" |
| "\"연관 아이템(Associated Items)\"은 다양한 타입의 [`아이템`](https://" |
| "doc.rust-lang.org/reference/items.html)에 관련된 규칙 집합을 말합니다. 이는 " |
| "`trait` 제네릭의 확장이며, `trait`가 내부적으로 새로운 아이템을 정의할 수 있" |
| "게 해줍니다." |
| |
| #: src/generics/assoc_items.md:7 |
| msgid "" |
| "One such item is called an _associated type_, providing simpler usage " |
| "patterns when the `trait` is generic over its container type." |
| msgstr "" |
| "그러한 아이템 중 하나가 _연관 타입(associated type)_이며, `trait`가 컨테이너 " |
| "타입에 대해 제네릭일 때 더 간단한 사용 패턴을 제공합니다." |
| |
| #: src/generics/assoc_items.md:12 |
| msgid "" |
| "[RFC](https://github.com/rust-lang/rfcs/blob/master/text/0195-associated-" |
| "items.md)" |
| msgstr "" |
| "[RFC](https://github.com/rust-lang/rfcs/blob/master/text/0195-associated-" |
| "items.md)" |
| |
| #: src/generics/assoc_items/the_problem.md:3 |
| msgid "" |
| "A `trait` that is generic over its container type has type specification " |
| "requirements - users of the `trait` _must_ specify all of its generic types." |
| msgstr "" |
| "컨테이너 타입에 대해 제네릭인 `trait`는 타입 명시 요구사항을 가집니다 - " |
| "`trait` 사용자는 모든 제네릭 타입을 _반드시_ 명시해야 합니다." |
| |
| #: src/generics/assoc_items/the_problem.md:6 |
| msgid "" |
| "In the example below, the `Contains` `trait` allows the use of the generic " |
| "types `A` and `B`. The trait is then implemented for the `Container` type, " |
| "specifying `i32` for `A` and `B` so that it can be used with `fn " |
| "difference()`." |
| msgstr "" |
| "아래 예제에서 `Contains` `trait`는 제네릭 타입 `A`와 `B`의 사용을 허용합니" |
| "다. 그 후 이 트레이트는 `Container` 타입에 대해 구현되는데, `fn difference()`" |
| "와 함께 사용될 수 있도록 `A`와 `B`에 대해 `i32`를 지정합니다." |
| |
| #: src/generics/assoc_items/the_problem.md:10 |
| msgid "" |
| "Because `Contains` is generic, we are forced to explicitly state _all_ of " |
| "the generic types for `fn difference()`. In practice, we want a way to " |
| "express that `A` and `B` are determined by the _input_ `C`. As you will see " |
| "in the next section, associated types provide exactly that capability." |
| msgstr "" |
| "`Contains`가 제네릭이기 때문에, 우리는 `fn difference()`에 대해 _모든_ 제네" |
| "릭 타입을 명시적으로 나열해야만 합니다. 실제로는 `A`와 `B`가 _입력_ `C`에 의" |
| "해 결정된다는 것을 표현하고 싶습니다. 다음 섹션에서 보게 되겠지만, 연관 타입" |
| "은 정확히 그런 기능을 제공합니다." |
| |
| #: src/generics/assoc_items/the_problem.md:17 |
| #: src/generics/assoc_items/types.md:36 |
| msgid "" |
| "// A trait which checks if 2 items are stored inside of container.\n" |
| "// Also retrieves first or last value.\n" |
| msgstr "" |
| "// 컨테이너 안에 2개의 아이템이 저장되어 있는지 확인하는 트레이트입니다.\n" |
| "// 또한 첫 번째 또는 마지막 값을 가져옵니다.\n" |
| |
| #: src/generics/assoc_items/the_problem.md:21 |
| msgid "// Explicitly requires `A` and `B`.\n" |
| msgstr "// 명시적으로 `A`와 `B`를 요구합니다.\n" |
| |
| #: src/generics/assoc_items/the_problem.md:22 |
| #: src/generics/assoc_items/the_problem.md:23 |
| msgid "// Doesn't explicitly require `A` or `B`.\n" |
| msgstr "// 명시적으로 `A`나 `B`를 요구하지 않습니다.\n" |
| |
| #: src/generics/assoc_items/the_problem.md:27 |
| msgid "// True if the numbers stored are equal.\n" |
| msgstr "// 저장된 숫자들이 같으면 참입니다.\n" |
| |
| #: src/generics/assoc_items/the_problem.md:32 |
| #: src/generics/assoc_items/types.md:60 |
| msgid "// Grab the first number.\n" |
| msgstr "// 첫 번째 숫자를 가져옵니다.\n" |
| |
| #: src/generics/assoc_items/the_problem.md:35 |
| #: src/generics/assoc_items/types.md:63 |
| msgid "// Grab the last number.\n" |
| msgstr "// 마지막 숫자를 가져옵니다.\n" |
| |
| #: src/generics/assoc_items/the_problem.md:38 |
| msgid "" |
| "// `C` contains `A` and `B`. In light of that, having to express `A` and\n" |
| "// `B` again is a nuisance.\n" |
| msgstr "" |
| "// `C`는 `A`와 `B`를 포함합니다. 이를 고려할 때, `A`와 `B`를\n" |
| "// 다시 표현해야 하는 것은 성가신 일입니다.\n" |
| |
| #: src/generics/assoc_items/the_problem.md:52 |
| #: src/generics/assoc_items/types.md:77 |
| msgid "\"Does container contain {} and {}: {}\"" |
| msgstr "\"컨테이너가 {}와 {}를 포함합니까: {}\"" |
| |
| #: src/generics/assoc_items/the_problem.md:55 |
| #: src/generics/assoc_items/types.md:80 |
| msgid "\"First number: {}\"" |
| msgstr "\"첫 번째 숫자: {}\"" |
| |
| #: src/generics/assoc_items/the_problem.md:56 |
| #: src/generics/assoc_items/types.md:81 |
| msgid "\"Last number: {}\"" |
| msgstr "\"마지막 숫자: {}\"" |
| |
| #: src/generics/assoc_items/the_problem.md:58 |
| #: src/generics/assoc_items/types.md:83 |
| msgid "\"The difference is: {}\"" |
| msgstr "\"차이는: {}\"" |
| |
| #: src/generics/assoc_items/the_problem.md:64 |
| msgid "" |
| "[`struct`s](../../custom_types/structs.md), and [`trait`s](../../trait.md)" |
| msgstr "" |
| "[`struct`](../../custom_types/structs.md), 그리고 [`trait`](../../trait.md)" |
| |
| #: src/generics/assoc_items/types.md:3 |
| msgid "" |
| "The use of \"Associated types\" improves the overall readability of code by " |
| "moving inner types locally into a trait as _output_ types. Syntax for the " |
| "`trait` definition is as follows:" |
| msgstr "" |
| "\"연관 타입\"을 사용하면 내부 타입을 트레이트 내의 _출력_ 타입으로 지역적으" |
| "로 이동시켜 코드의 전반적인 가독성을 향상시킬 수 있습니다. `trait` 정의를 위" |
| "한 구문은 다음과 같습니다:" |
| |
| #: src/generics/assoc_items/types.md:8 |
| msgid "" |
| "// `A` and `B` are defined in the trait via the `type` keyword.\n" |
| "// (Note: `type` in this context is different from `type` when used for\n" |
| "// aliases).\n" |
| msgstr "" |
| "// `A`와 `B`는 `type` 키워드를 통해 트레이트 내에 정의됩니다.\n" |
| "// (참고: 이 문맥에서의 `type`은 별칭(aliases)에 사용되는 `type`과는 다릅니" |
| "다).\n" |
| |
| #: src/generics/assoc_items/types.md:15 |
| msgid "// Updated syntax to refer to these new types generically.\n" |
| msgstr "" |
| "// 이 새로운 타입들을 제네릭하게 참조하기 위해 업데이트된 구문입니다.\n" |
| |
| #: src/generics/assoc_items/types.md:20 |
| msgid "" |
| "Note that functions that use the `trait` `Contains` are no longer required " |
| "to express `A` or `B` at all:" |
| msgstr "" |
| "`Contains` `trait`를 사용하는 함수들은 더 이상 `A`나 `B`를 표현할 필요가 없다" |
| "는 점에 유의하세요:" |
| |
| #: src/generics/assoc_items/types.md:24 |
| msgid "// Without using associated types\n" |
| msgstr "// 연관 타입을 사용하지 않는 경우\n" |
| |
| #: src/generics/assoc_items/types.md:27 |
| msgid "// Using associated types\n" |
| msgstr "// 연관 타입 사용\n" |
| |
| #: src/generics/assoc_items/types.md:32 |
| msgid "" |
| "Let's rewrite the example from the previous section using associated types:" |
| msgstr "이전 섹션의 예제를 연관 타입을 사용하여 다시 작성해 봅시다:" |
| |
| #: src/generics/assoc_items/types.md:40 |
| msgid "// Define generic types here which methods will be able to utilize.\n" |
| msgstr "// 여기서 제네릭 타입을 정의하여 메서드들이 활용할 수 있게 합니다.\n" |
| |
| #: src/generics/assoc_items/types.md:50 |
| msgid "" |
| "// Specify what types `A` and `B` are. If the `input` type\n" |
| " // is `Container(i32, i32)`, the `output` types are determined\n" |
| " // as `i32` and `i32`.\n" |
| msgstr "" |
| "// `A`와 `B`가 어떤 타입인지 명시합니다. 만약 `input` 타입이\n" |
| " // `Container(i32, i32)`라면, `output` 타입은 `i32`와 `i32`로\n" |
| " // 결정됩니다.\n" |
| |
| #: src/generics/assoc_items/types.md:56 |
| msgid "// `&Self::A` and `&Self::B` are also valid here.\n" |
| msgstr "// `&Self::A`와 `&Self::B` 또한 여기서 유효합니다.\n" |
| |
| #: src/generics/phantom.md:3 |
| msgid "" |
| "A phantom type parameter is one that doesn't show up at runtime, but is " |
| "checked statically (and only) at compile time." |
| msgstr "" |
| "팬텀 타입 파라미터(phantom type parameter)는 런타임에는 나타나지 않지만, 컴파" |
| "일 타임에만 정적으로 검사되는 파라미터입니다." |
| |
| #: src/generics/phantom.md:6 |
| msgid "" |
| "Data types can use extra generic type parameters to act as markers or to " |
| "perform type checking at compile time. These extra parameters hold no " |
| "storage values, and have no runtime behavior." |
| msgstr "" |
| "데이터 타입은 추가적인 제네릭 타입 파라미터를 사용하여 마커 역할을 하거나 컴" |
| "파일 타임에 타입 검사를 수행할 수 있습니다. 이러한 추가 파라미터는 저장 값을 " |
| "가지지 않으며, 런타임 동작도 없습니다." |
| |
| #: src/generics/phantom.md:10 |
| msgid "" |
| "In the following example, we combine [std::marker::PhantomData](https://" |
| "doc.rust-lang.org/std/marker/struct.PhantomData.html) with the phantom type " |
| "parameter concept to create tuples containing different data types." |
| msgstr "" |
| "다음 예제에서는 [std::marker::PhantomData](https://doc.rust-lang.org/std/" |
| "marker/struct.PhantomData.html)와 팬텀 타입 파라미터 개념을 결합하여 서로 다" |
| "른 데이터 타입을 포함하는 튜플을 생성합니다." |
| |
| #: src/generics/phantom.md:16 |
| msgid "" |
| "// A phantom tuple struct which is generic over `A` with hidden parameter " |
| "`B`.\n" |
| msgstr "" |
| "// 숨겨진 파라미터 `B`를 가지며 `A`에 대해 제네릭인 팬텀 튜플 구조체.\n" |
| |
| #: src/generics/phantom.md:18 src/generics/phantom.md:22 |
| msgid "// Allow equality test for this type.\n" |
| msgstr "// 이 타입에 대한 동등성 테스트를 허용합니다.\n" |
| |
| #: src/generics/phantom.md:20 |
| msgid "" |
| "// A phantom type struct which is generic over `A` with hidden parameter " |
| "`B`.\n" |
| msgstr "" |
| "// 숨겨진 파라미터 `B`를 가지며 `A`에 대해 제네릭인 팬텀 타입 구조체.\n" |
| |
| #: src/generics/phantom.md:24 |
| msgid "" |
| "// Note: Storage is allocated for generic type `A`, but not for `B`.\n" |
| "// Therefore, `B` cannot be used in computations.\n" |
| msgstr "" |
| "// 주의: 제네릭 타입 `A`에는 저장 공간이 할당되지만, `B`에는 할당되지 않습니" |
| "다.\n" |
| "// 따라서 `B`는 연산에 사용될 수 없습니다.\n" |
| |
| #: src/generics/phantom.md:29 |
| msgid "" |
| "// Here, `f32` and `f64` are the hidden parameters.\n" |
| " // PhantomTuple type specified as `<char, f32>`.\n" |
| msgstr "" |
| "// 여기서 `f32`와 `f64`는 숨겨진 파라미터입니다.\n" |
| " // PhantomTuple 타입이 `<char, f32>`로 지정되었습니다.\n" |
| |
| #: src/generics/phantom.md:31 src/generics/phantom.md:33 |
| #: src/generics/phantom.md:37 src/generics/phantom.md:42 |
| #: src/scope/borrow/ref.md:12 |
| msgid "'Q'" |
| msgstr "'Q'" |
| |
| #: src/generics/phantom.md:32 |
| msgid "// PhantomTuple type specified as `<char, f64>`.\n" |
| msgstr "// PhantomTuple 타입이 `<char, f64>`로 지정되었습니다.\n" |
| |
| #: src/generics/phantom.md:35 |
| msgid "// Type specified as `<char, f32>`.\n" |
| msgstr "// 타입이 `<char, f32>`로 지정되었습니다.\n" |
| |
| #: src/generics/phantom.md:40 |
| msgid "// Type specified as `<char, f64>`.\n" |
| msgstr "// 타입이 `<char, f64>`로 지정되었습니다.\n" |
| |
| #: src/generics/phantom.md:46 |
| msgid "" |
| "// Compile-time Error! Type mismatch so these cannot be compared:\n" |
| " // println!(\"_tuple1 == _tuple2 yields: {}\",\n" |
| " // _tuple1 == _tuple2);\n" |
| msgstr "" |
| "// 컴파일 타임 에러! 타입 불일치로 인해 비교할 수 없습니다:\n" |
| " // println!(\"_tuple1 == _tuple2 yields: {}\",\n" |
| " // _tuple1 == _tuple2);\n" |
| |
| #: src/generics/phantom.md:50 |
| msgid "" |
| "// Compile-time Error! Type mismatch so these cannot be compared:\n" |
| " // println!(\"_struct1 == _struct2 yields: {}\",\n" |
| " // _struct1 == _struct2);\n" |
| msgstr "" |
| "// 컴파일 타임 에러! 타입 불일치로 인해 비교할 수 없습니다:\n" |
| "// println!(\"_struct1 == _struct2 yields: {}\",\n" |
| "// _struct1 == _struct2);\n" |
| |
| #: src/generics/phantom.md:58 |
| msgid "" |
| "[Derive](../trait/derive.md), [struct](../custom_types/structs.md), and " |
| "[tuple](../primitives/tuples.html)." |
| msgstr "" |
| "[Derive](../trait/derive.md), [구조체](../custom_types/structs.md), 그리고 " |
| "[튜플](../primitives/tuples.html)." |
| |
| #: src/generics/phantom/testcase_units.md:3 |
| msgid "" |
| "A useful method of unit conversions can be examined by implementing `Add` " |
| "with a phantom type parameter. The `Add` `trait` is examined below:" |
| msgstr "" |
| "팬텀 타입 파라미터로 `Add`를 구현하여 유용한 단위 변환 방법을 살펴볼 수 있습" |
| "니다. `Add` `트레이트`는 아래에서 살펴봅니다:" |
| |
| #: src/generics/phantom/testcase_units.md:7 |
| msgid "" |
| "// This construction would impose: `Self + RHS = Output`\n" |
| "// where RHS defaults to Self if not specified in the implementation.\n" |
| msgstr "" |
| "// 이 구조는 다음을 부과합니다: `Self + RHS = Output`\n" |
| "// 구현에서 지정되지 않은 경우 RHS는 기본적으로 Self입니다.\n" |
| |
| #: src/generics/phantom/testcase_units.md:14 |
| msgid "// `Output` must be `T<U>` so that `T<U> + T<U> = T<U>`.\n" |
| msgstr "" |
| "// `Output`은 `T<U> + T<U> = T<U>`가 되도록 반드시 `T<U>`여야 합니다.\n" |
| |
| #: src/generics/phantom/testcase_units.md:22 |
| msgid "The whole implementation:" |
| msgstr "전체 구현:" |
| |
| #: src/generics/phantom/testcase_units.md:27 |
| msgid "/// Create void enumerations to define unit types.\n" |
| msgstr "/// 단위 타입을 정의하기 위해 빈 열거형을 생성합니다.\n" |
| |
| #: src/generics/phantom/testcase_units.md:33 |
| msgid "" |
| "/// `Length` is a type with phantom type parameter `Unit`,\n" |
| "/// and is not generic over the length type (that is `f64`).\n" |
| "///\n" |
| "/// `f64` already implements the `Clone` and `Copy` traits.\n" |
| msgstr "" |
| "/// `Length`는 팬텀 타입 파라미터 `Unit`을 가지는 타입이며,\n" |
| "/// 길이 타입(`f64`)에 대해서는 제네릭이 아닙니다.\n" |
| "///\n" |
| "/// `f64`는 이미 `Clone`과 `Copy` 트레이트를 구현하고 있습니다.\n" |
| |
| #: src/generics/phantom/testcase_units.md:40 |
| msgid "/// The `Add` trait defines the behavior of the `+` operator.\n" |
| msgstr "/// `Add` 트레이트는 `+` 연산자의 동작을 정의합니다.\n" |
| |
| #: src/generics/phantom/testcase_units.md:45 |
| msgid "// add() returns a new `Length` struct containing the sum.\n" |
| msgstr "// add()는 합계를 포함하는 새로운 `Length` 구조체를 반환합니다.\n" |
| |
| #: src/generics/phantom/testcase_units.md:47 |
| msgid "// `+` calls the `Add` implementation for `f64`.\n" |
| msgstr "// `+`는 `f64`에 대한 `Add` 구현을 호출합니다.\n" |
| |
| #: src/generics/phantom/testcase_units.md:53 |
| msgid "// Specifies `one_foot` to have phantom type parameter `Inch`.\n" |
| msgstr "// `one_foot`가 팬텀 타입 파라미터 `Inch`를 가지도록 지정합니다.\n" |
| |
| #: src/generics/phantom/testcase_units.md:55 |
| msgid "// `one_meter` has phantom type parameter `Mm`.\n" |
| msgstr "// `one_meter`는 팬텀 타입 파라미터 `Mm`을 가집니다.\n" |
| |
| #: src/generics/phantom/testcase_units.md:58 |
| msgid "" |
| "// `+` calls the `add()` method we implemented for `Length<Unit>`.\n" |
| " //\n" |
| " // Since `Length` implements `Copy`, `add()` does not consume\n" |
| " // `one_foot` and `one_meter` but copies them into `self` and `rhs`.\n" |
| msgstr "" |
| "// `+`는 우리가 `Length<Unit>`에 대해 구현한 `add()` 메서드를 호출합니다.\n" |
| "//\n" |
| "// `Length`가 `Copy`를 구현하므로, `add()`는 `one_foot`과 `one_meter`를\n" |
| "// 소비(consume)하지 않고 `self`와 `rhs`로 복사합니다.\n" |
| |
| #: src/generics/phantom/testcase_units.md:65 |
| msgid "// Addition works.\n" |
| msgstr "// 덧셈이 작동합니다.\n" |
| |
| #: src/generics/phantom/testcase_units.md:66 |
| msgid "\"one foot + one_foot = {:?} in\"" |
| msgstr "\"1피트 + 1피트 = {:?} 인치\"" |
| |
| #: src/generics/phantom/testcase_units.md:67 |
| msgid "\"one meter + one_meter = {:?} mm\"" |
| msgstr "\"1미터 + 1미터 = {:?} mm\"" |
| |
| #: src/generics/phantom/testcase_units.md:69 |
| msgid "" |
| "// Nonsensical operations fail as they should:\n" |
| " // Compile-time Error: type mismatch.\n" |
| " //let one_feter = one_foot + one_meter;\n" |
| msgstr "" |
| "// 말도 안 되는 연산은 실패합니다:\n" |
| "// 컴파일 타임 에러: 타입 불일치.\n" |
| "// let one_feter = one_foot + one_meter;\n" |
| |
| #: src/generics/phantom/testcase_units.md:77 |
| msgid "" |
| "[Borrowing (`&`)](../../scope/borrow.md), [Bounds (`X: Y`)](../../generics/" |
| "bounds.md), [enum](../../custom_types/enum.md), [impl & self](../../fn/" |
| "methods.md), [Overloading](../../trait/ops.md), [ref](../../scope/borrow/" |
| "ref.md), [Traits (`X for Y`)](../../trait.md), and [TupleStructs](../../" |
| "custom_types/structs.md)." |
| msgstr "" |
| "[빌림(Borrowing) (`&`)](../../scope/borrow.md), [바운드(Bounds) (`X: Y`)]" |
| "(../../generics/bounds.md), [열거형(enum)](../../custom_types/enum.md), " |
| "[impl & self](../../fn/methods.md), [오버로딩(Overloading)](../../trait/" |
| "ops.md), [ref](../../scope/borrow/ref.md), [트레이트(Traits) (`X for Y`)]" |
| "(../../trait.md), 그리고 [튜플 구조체(TupleStructs)](../../custom_types/" |
| "structs.md)." |
| |
| #: src/scope.md:3 |
| msgid "" |
| "Scopes play an important part in ownership, borrowing, and lifetimes. That " |
| "is, they indicate to the compiler when borrows are valid, when resources can " |
| "be freed, and when variables are created or destroyed." |
| msgstr "" |
| "스코프(범위)는 소유권(ownership), 빌림(borrowing), 라이프타임(lifetimes)에서 " |
| "중요한 역할을 합니다. 즉, 스코프는 컴파일러에게 언제 빌림이 유효한지, 언제 자" |
| "원이 해제될 수 있는지, 언제 변수가 생성되고 파괴되는지를 알려줍니다." |
| |
| #: src/scope/raii.md:3 |
| msgid "" |
| "Variables in Rust do more than just hold data in the stack: they also _own_ " |
| "resources, e.g. `Box<T>` owns memory in the heap. Rust enforces [RAII]" |
| "(https://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization) " |
| "(Resource Acquisition Is Initialization), so whenever an object goes out of " |
| "scope, its destructor is called and its owned resources are freed." |
| msgstr "" |
| "Rust의 변수는 스택에 데이터를 저장하는 것 이상의 일을 합니다. 예를 들어 " |
| "`Box<T>`는 힙 메모리를 소유하는 것처럼 리소스를 _소유(own)_하기도 합니다. " |
| "Rust는 [RAII](https://en.wikipedia.org/wiki/" |
| "Resource_Acquisition_Is_Initialization) (자원의 획득은 초기화이다)를 강제하므" |
| "로, 객체가 스코프를 벗어날 때마다 소멸자가 호출되어 소유한 리소스가 해제됩니" |
| "다." |
| |
| #: src/scope/raii.md:8 |
| msgid "" |
| "This behavior shields against _resource leak_ bugs, so you'll never have to " |
| "manually free memory or worry about memory leaks again! Here's a quick " |
| "showcase:" |
| msgstr "" |
| "이러한 동작은 _리소스 누수_ 버그를 방지하므로, 수동으로 메모리를 해제하거나 " |
| "메모리 누수에 대해 걱정할 필요가 없습니다! 간단한 예시를 보여드리겠습니다:" |
| |
| #: src/scope/raii.md:12 |
| msgid "// raii.rs\n" |
| msgstr "// raii.rs\n" |
| |
| #: src/scope/raii.md:14 src/scope/raii.md:21 src/scope/raii.md:26 |
| msgid "// Allocate an integer on the heap\n" |
| msgstr "// 힙에 정수를 할당합니다\n" |
| |
| #: src/scope/raii.md:17 |
| msgid "// `_box1` is destroyed here, and memory gets freed\n" |
| msgstr "// `_box1`은 여기서 파괴되고, 메모리가 해제됩니다\n" |
| |
| #: src/scope/raii.md:24 |
| msgid "// A nested scope:\n" |
| msgstr "// 중첩된 스코프:\n" |
| |
| #: src/scope/raii.md:29 |
| msgid "// `_box3` is destroyed here, and memory gets freed\n" |
| msgstr "// `_box3`은 여기서 파괴되고, 메모리가 해제됩니다\n" |
| |
| #: src/scope/raii.md:32 |
| msgid "" |
| "// Creating lots of boxes just for fun\n" |
| " // There's no need to manually free memory!\n" |
| msgstr "" |
| "// 재미 삼아 많은 상자를 만듭니다\n" |
| " // 수동으로 메모리를 해제할 필요가 없습니다!\n" |
| |
| #: src/scope/raii.md:38 |
| msgid "// `_box2` is destroyed here, and memory gets freed\n" |
| msgstr "// `_box2`는 여기서 파괴되고, 메모리가 해제됩니다\n" |
| |
| #: src/scope/raii.md:42 |
| msgid "" |
| "Of course, we can double check for memory errors using [`valgrind`](http://" |
| "valgrind.org/info/):" |
| msgstr "" |
| "물론 [`valgrind`](http://valgrind.org/info/)를 사용하여 메모리 에러를 다시 확" |
| "인할 수 있습니다:" |
| |
| #: src/scope/raii.md:65 |
| msgid "No leaks here!" |
| msgstr "누수가 없습니다!" |
| |
| #: src/scope/raii.md:67 |
| msgid "Destructor" |
| msgstr "소멸자" |
| |
| #: src/scope/raii.md:69 |
| msgid "" |
| "The notion of a destructor in Rust is provided through the [`Drop`](https://" |
| "doc.rust-lang.org/std/ops/trait.Drop.html) trait. The destructor is called " |
| "when the resource goes out of scope. This trait is not required to be " |
| "implemented for every type, only implement it for your type if you require " |
| "its own destructor logic." |
| msgstr "" |
| "Rust에서 소멸자의 개념은 [`Drop`](https://doc.rust-lang.org/std/ops/" |
| "trait.Drop.html) 트레이트를 통해 제공됩니다. 소멸자는 리소스가 스코프를 벗어" |
| "날 때 호출됩니다. 모든 타입에 대해 이 트레이트를 구현할 필요는 없으며, 자체적" |
| "인 소멸자 로직이 필요한 경우에만 구현하면 됩니다." |
| |
| #: src/scope/raii.md:74 |
| msgid "" |
| "Run the below example to see how the [`Drop`](https://doc.rust-lang.org/std/" |
| "ops/trait.Drop.html) trait works. When the variable in the `main` function " |
| "goes out of scope the custom destructor will be invoked." |
| msgstr "" |
| "아래 예제를 실행하여 [`Drop`](https://doc.rust-lang.org/std/ops/" |
| "trait.Drop.html) 트레이트가 어떻게 작동하는지 확인해 보세요. `main` 함수의 변" |
| "수가 스코프를 벗어나면 사용자 정의 소멸자가 호출될 것입니다." |
| |
| #: src/scope/raii.md:82 |
| msgid "\"ToDrop is being dropped\"" |
| msgstr "\"ToDrop이 드롭되고 있습니다\"" |
| |
| #: src/scope/raii.md:88 |
| msgid "\"Made a ToDrop!\"" |
| msgstr "\"ToDrop을 만들었습니다!\"" |
| |
| #: src/scope/raii.md:94 |
| msgid "[Box](../std/box.md)" |
| msgstr "[Box](../std/box.md)" |
| |
| #: src/scope/move.md:3 |
| msgid "" |
| "Because variables are in charge of freeing their own resources, **resources " |
| "can only have one owner**. This prevents resources from being freed more " |
| "than once. Note that not all variables own resources (e.g. [references](../" |
| "flow_control/match/destructuring/destructure_pointers.md))." |
| msgstr "" |
| "변수는 자신의 리소스를 해제할 책임이 있으므로, **리소스는 오직 하나의 소유자" |
| "만 가질 수 있습니다**. 이는 리소스가 한 번 이상 해제되는 것을 방지합니다. 모" |
| "든 변수가 리소스를 소유하는 것은 아닙니다(예: [참조](../flow_control/match/" |
| "destructuring/destructure_pointers.md))." |
| |
| #: src/scope/move.md:8 |
| msgid "" |
| "When doing assignments (`let x = y`) or passing function arguments by value " |
| "(`foo(x)`), the _ownership_ of the resources is transferred. In Rust-speak, " |
| "this is known as a _move_." |
| msgstr "" |
| "할당(`let x = y`)을 하거나 함수 인자를 값으로 전달(`foo(x)`)할 때, 리소스의 _" |
| "소유권_이 이전됩니다. Rust 용어로는 이를 _이동(move)_이라고 합니다." |
| |
| #: src/scope/move.md:12 |
| msgid "" |
| "After moving resources, the previous owner can no longer be used. This " |
| "avoids creating dangling pointers." |
| msgstr "" |
| "리소스를 이동한 후에는 이전 소유자를 더 이상 사용할 수 없습니다. 이는 댕글링 " |
| "포인터(dangling pointers) 생성을 방지합니다." |
| |
| #: src/scope/move.md:16 |
| msgid "// This function takes ownership of the heap allocated memory\n" |
| msgstr "// 이 함수는 힙에 할당된 메모리의 소유권을 가져갑니다\n" |
| |
| #: src/scope/move.md:18 |
| msgid "\"Destroying a box that contains {}\"" |
| msgstr "\"{}를 포함하는 상자를 파괴 중\"" |
| |
| #: src/scope/move.md:20 |
| msgid "// `c` is destroyed and the memory freed\n" |
| msgstr "// `c`가 파괴되고 메모리가 해제됩니다\n" |
| |
| #: src/scope/move.md:24 |
| msgid "// _Stack_ allocated integer\n" |
| msgstr "// _스택_에 할당된 정수\n" |
| |
| #: src/scope/move.md:27 |
| msgid "// *Copy* `x` into `y` - no resources are moved\n" |
| msgstr "// `x`를 `y`로 *복사* - 리소스가 이동되지 않음\n" |
| |
| #: src/scope/move.md:30 |
| msgid "// Both values can be independently used\n" |
| msgstr "// 두 값 모두 독립적으로 사용될 수 있음\n" |
| |
| #: src/scope/move.md:31 |
| msgid "\"x is {}, and y is {}\"" |
| msgstr "\"x는 {}이고, y는 {}입니다\"" |
| |
| #: src/scope/move.md:33 |
| msgid "// `a` is a pointer to a _heap_ allocated integer\n" |
| msgstr "// `a`는 _힙_에 할당된 정수에 대한 포인터입니다\n" |
| |
| #: src/scope/move.md:36 |
| msgid "\"a contains: {}\"" |
| msgstr "\"a가 포함하는 것: {}\"" |
| |
| #: src/scope/move.md:38 |
| msgid "// *Move* `a` into `b`\n" |
| msgstr "// `a`를 `b`로 *이동*\n" |
| |
| #: src/scope/move.md:40 |
| msgid "" |
| "// The pointer address of `a` is copied (not the data) into `b`.\n" |
| " // Both are now pointers to the same heap allocated data, but\n" |
| " // `b` now owns it.\n" |
| msgstr "" |
| "// `a`의 포인터 주소가 (데이터가 아니라) `b`로 복사됩니다.\n" |
| "// 둘 다 이제 동일한 힙 할당 데이터를 가리키지만,\n" |
| "// 이제 `b`가 소유권을 가집니다.\n" |
| |
| #: src/scope/move.md:44 |
| msgid "" |
| "// Error! `a` can no longer access the data, because it no longer owns the\n" |
| " // heap memory\n" |
| " //println!(\"a contains: {}\", a);\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! `a`는 더 이상 데이터를 소유하고 있지 않으므로 접근할 수 없습니다.\n" |
| "//println!(\"a가 포함하는 것: {}\", a);\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/scope/move.md:49 |
| msgid "" |
| "// This function takes ownership of the heap allocated memory from `b`\n" |
| msgstr "// 이 함수는 `b`로부터 힙에 할당된 메모리의 소유권을 가져갑니다\n" |
| |
| #: src/scope/move.md:52 |
| msgid "" |
| "// Since the heap memory has been freed at this point, this action would\n" |
| " // result in dereferencing freed memory, but it's forbidden by the " |
| "compiler\n" |
| " // Error! Same reason as the previous Error\n" |
| " //println!(\"b contains: {}\", b);\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 이 시점에서 힙 메모리가 해제되었으므로, 이 동작은\n" |
| " // 해제된 메모리를 역참조하는 결과를 낳겠지만, 컴파일러에 의해 금지됩니" |
| "다.\n" |
| " // 에러! 이전 에러와 같은 이유입니다.\n" |
| " //println!(\"b가 포함하는 것: {}\", b);\n" |
| " // TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/scope/move/mut.md:3 |
| msgid "Mutability of data can be changed when ownership is transferred." |
| msgstr "소유권이 이전될 때 데이터의 가변성이 변경될 수 있습니다." |
| |
| #: src/scope/move/mut.md:9 |
| msgid "\"immutable_box contains {}\"" |
| msgstr "\"불변 상자가 포함하는 것: {}\"" |
| |
| #: src/scope/move/mut.md:11 |
| msgid "" |
| "// Mutability error\n" |
| " //*immutable_box = 4;\n" |
| msgstr "" |
| "// 가변성 에러\n" |
| " //*immutable_box = 4;\n" |
| |
| #: src/scope/move/mut.md:14 |
| msgid "// *Move* the box, changing the ownership (and mutability)\n" |
| msgstr "// 상자를 *이동*하여 소유권(및 가변성)을 변경합니다\n" |
| |
| #: src/scope/move/mut.md:17 |
| msgid "\"mutable_box contains {}\"" |
| msgstr "\"가변 상자가 포함하는 것: {}\"" |
| |
| #: src/scope/move/mut.md:19 |
| msgid "// Modify the contents of the box\n" |
| msgstr "// 상자의 내용물을 수정합니다\n" |
| |
| #: src/scope/move/mut.md:22 |
| msgid "\"mutable_box now contains {}\"" |
| msgstr "\"가변 상자가 이제 포함하는 것: {}\"" |
| |
| #: src/scope/move/partial_move.md:3 |
| msgid "" |
| "Within the [destructuring](../../flow_control/match/destructuring.md) of a " |
| "single variable, both `by-move` and `by-reference` pattern bindings can be " |
| "used at the same time. Doing this will result in a _partial move_ of the " |
| "variable, which means that parts of the variable will be moved while other " |
| "parts stay. In such a case, the parent variable cannot be used afterwards as " |
| "a whole, however the parts that are only referenced (and not moved) can " |
| "still be used. Note that types that implement the [`Drop` trait](../../trait/" |
| "drop.md) cannot be partially moved from, because its `drop` method would use " |
| "it afterwards as a whole." |
| msgstr "" |
| "단일 변수의 [구조 분해](../../flow_control/match/destructuring.md) 내에서 `이" |
| "동에 의한(by-move)` 패턴 바인딩과 `참조에 의한(by-reference)` 패턴 바인딩을 " |
| "동시에 사용할 수 있습니다. 이렇게 하면 변수의 _부분 이동(partial move)_이 발" |
| "생하는데, 이는 변수의 일부는 이동하고 다른 부분은 남아있음을 의미합니다. 이" |
| "런 경우 부모 변수는 전체로서 나중에 사용될 수 없지만, 참조만 되고 이동되지 않" |
| "은 부분은 여전히 사용될 수 있습니다. [`Drop` 트레이트](../../trait/drop.md)" |
| "를 구현한 타입은 부분적으로 이동될 수 없다는 점에 유의하세요. 왜냐하면 해당 " |
| "타입의 `drop` 메서드가 나중에 전체로서 사용될 것이기 때문입니다." |
| |
| #: src/scope/move/partial_move.md:22 |
| msgid "" |
| "// Error! cannot move out of a type which implements the `Drop` trait\n" |
| " //impl Drop for Person {\n" |
| " // fn drop(&mut self) {\n" |
| " // println!(\"Dropping the person struct {:?}\", self)\n" |
| " // }\n" |
| " //}\n" |
| " // TODO ^ Try uncommenting these lines\n" |
| msgstr "" |
| "// 에러! `Drop` 트레이트를 구현한 타입에서는 이동해 나올 수 없습니다\n" |
| " //impl Drop for Person {\n" |
| " // fn drop(&mut self) {\n" |
| " // println!(\"Person 구조체를 드롭합니다 {:?}\", self)\n" |
| " // }\n" |
| " //}\n" |
| " // TODO ^ 이 줄들의 주석을 해제해 보세요\n" |
| |
| #: src/scope/move/partial_move.md:35 |
| msgid "// `name` is moved out of person, but `age` is referenced\n" |
| msgstr "// `name`은 person에서 밖으로 이동되지만, `age`는 참조됩니다\n" |
| |
| #: src/scope/move/partial_move.md:38 |
| msgid "\"The person's age is {}\"" |
| msgstr "\"이 사람의 나이는 {}입니다\"" |
| |
| #: src/scope/move/partial_move.md:40 |
| msgid "\"The person's name is {}\"" |
| msgstr "\"이 사람의 이름은 {}입니다\"" |
| |
| #: src/scope/move/partial_move.md:42 |
| msgid "" |
| "// Error! borrow of partially moved value: `person` partial move occurs\n" |
| " //println!(\"The person struct is {:?}\", person);\n" |
| msgstr "" |
| "// 에러! 부분적으로 이동된 값의 빌림: `person`의 부분 이동이 발생했습니다\n" |
| " //println!(\"Person 구조체는 {:?}입니다\", person);\n" |
| |
| #: src/scope/move/partial_move.md:45 |
| msgid "" |
| "// `person` cannot be used but `person.age` can be used as it is not moved\n" |
| msgstr "" |
| "// `person`은 사용할 수 없지만 `person.age`는 이동되지 않았으므로 사용할 수 " |
| "있습니다\n" |
| |
| #: src/scope/move/partial_move.md:46 |
| msgid "\"The person's age from person struct is {}\"" |
| msgstr "\"person 구조체에서 가져온 이 사람의 나이는 {}입니다\"" |
| |
| #: src/scope/move/partial_move.md:50 |
| msgid "" |
| "(In this example, we store the `age` variable on the heap to illustrate the " |
| "partial move: deleting `ref` in the above code would give an error as the " |
| "ownership of `person.age` would be moved to the variable `age`. If " |
| "`Person.age` were stored on the stack, `ref` would not be required as the " |
| "definition of `age` would copy the data from `person.age` without moving it.)" |
| msgstr "" |
| "(이 예제에서는 부분 이동을 설명하기 위해 `age` 변수를 힙에 저장합니다. 위 코" |
| "드에서 `ref`를 삭제하면 `person.age`의 소유권이 `age` 변수로 이동하기 때문에 " |
| "에러가 발생합니다. `Person.age`가 스택에 저장되어 있었다면, `age`의 정의가 " |
| "`person.age`에서 데이터를 이동 없이 복사하므로 `ref`가 필요하지 않았을 것입니" |
| "다.)" |
| |
| #: src/scope/move/partial_move.md:59 |
| msgid "[destructuring](../../flow_control/match/destructuring.md)" |
| msgstr "[구조 분해](../../flow_control/match/destructuring.md)" |
| |
| #: src/scope/borrow.md:3 |
| msgid "" |
| "Most of the time, we'd like to access data without taking ownership over it. " |
| "To accomplish this, Rust uses a _borrowing_ mechanism. Instead of passing " |
| "objects by value (`T`), objects can be passed by reference (`&T`)." |
| msgstr "" |
| "대부분의 경우, 우리는 데이터의 소유권을 가져오지 않고 데이터에 접근하고 싶어 " |
| "합니다. 이를 달성하기 위해 Rust는 _빌림(borrowing)_ 메커니즘을 사용합니다. 객" |
| "체를 값(`T`)으로 전달하는 대신, 참조(`&T`)로 전달할 수 있습니다." |
| |
| #: src/scope/borrow.md:7 |
| msgid "" |
| "The compiler statically guarantees (via its borrow checker) that references " |
| "_always_ point to valid objects. That is, while references to an object " |
| "exist, the object cannot be destroyed." |
| msgstr "" |
| "컴파일러는 (빌림 검사기를 통해) 참조가 _항상_ 유효한 객체를 가리킨다는 것을 " |
| "정적으로 보장합니다. 즉, 객체에 대한 참조가 존재하는 동안에는 해당 객체를 파" |
| "괴할 수 없습니다." |
| |
| #: src/scope/borrow.md:12 |
| msgid "// This function takes ownership of a box and destroys it\n" |
| msgstr "// 이 함수는 상자의 소유권을 가져와 파괴합니다\n" |
| |
| #: src/scope/borrow.md:14 |
| msgid "\"Destroying box that contains {}\"" |
| msgstr "\"{}를 포함하는 상자를 파괴 중\"" |
| |
| #: src/scope/borrow.md:16 |
| msgid "// This function borrows an i32\n" |
| msgstr "// 이 함수는 i32를 빌립니다\n" |
| |
| #: src/scope/borrow.md:19 |
| msgid "\"This int is: {}\"" |
| msgstr "\"이 정수는: {}\"" |
| |
| #: src/scope/borrow.md:23 |
| msgid "" |
| "// Create a boxed i32 in the heap, and an i32 on the stack\n" |
| " // Remember: numbers can have arbitrary underscores added for " |
| "readability\n" |
| " // 5_i32 is the same as 5i32\n" |
| msgstr "" |
| "// 힙에 boxed i32를 생성하고, 스택에 i32를 생성합니다\n" |
| "// 기억하세요: 숫자는 가독성을 위해 임의의 밑줄을 추가할 수 있습니다\n" |
| "// 5_i32는 5i32와 동일합니다\n" |
| |
| #: src/scope/borrow.md:29 |
| msgid "" |
| "// Borrow the contents of the box. Ownership is not taken,\n" |
| " // so the contents can be borrowed again.\n" |
| msgstr "" |
| "// 상자의 내용물을 빌립니다. 소유권을 가져가지 않으므로,\n" |
| "// 내용물을 다시 빌릴 수 있습니다.\n" |
| |
| #: src/scope/borrow.md:35 |
| msgid "// Take a reference to the data contained inside the box\n" |
| msgstr "// 상자 안에 포함된 데이터에 대한 참조를 가져옵니다\n" |
| |
| #: src/scope/borrow.md:38 |
| msgid "" |
| "// Error!\n" |
| " // Can't destroy `boxed_i32` while the inner value is borrowed later " |
| "in scope.\n" |
| msgstr "" |
| "// 에러!\n" |
| "// 내부 값이 스코프의 나중 부분에서 빌려지고 있는 동안에는 `boxed_i32`를 파괴" |
| "할 수 없습니다.\n" |
| |
| #: src/scope/borrow.md:43 |
| msgid "// Attempt to borrow `_ref_to_i32` after inner value is destroyed\n" |
| msgstr "// 내부 값이 파괴된 후에 `_ref_to_i32`를 빌리려고 시도합니다\n" |
| |
| #: src/scope/borrow.md:45 |
| msgid "// `_ref_to_i32` goes out of scope and is no longer borrowed.\n" |
| msgstr "// `_ref_to_i32`가 스코프를 벗어나며 더 이상 빌려지지 않습니다.\n" |
| |
| #: src/scope/borrow.md:48 |
| msgid "" |
| "// `boxed_i32` can now give up ownership to `eat_box_i32` and be destroyed\n" |
| msgstr "" |
| "// `boxed_i32`는 이제 `eat_box_i32`에게 소유권을 넘기고 파괴될 수 있습니다\n" |
| |
| #: src/scope/borrow/mut.md:3 |
| msgid "" |
| "Mutable data can be mutably borrowed using `&mut T`. This is called a " |
| "_mutable reference_ and gives read/write access to the borrower. In " |
| "contrast, `&T` borrows the data via an immutable reference, and the borrower " |
| "can read the data but not modify it:" |
| msgstr "" |
| "가변 데이터는 `&mut T`를 사용하여 가변적으로 빌려올 수 있습니다. 이를 _가변 " |
| "참조(mutable reference)_라고 하며 빌리는 사람에게 읽기/쓰기 권한을 부여합니" |
| "다. 반면 `&T`는 불변 참조를 통해 데이터를 빌려오며, 빌리는 사람은 데이터를 읽" |
| "을 수는 있지만 수정할 수는 없습니다:" |
| |
| #: src/scope/borrow/mut.md:12 |
| msgid "" |
| "// `&'static str` is a reference to a string allocated in read only memory\n" |
| msgstr "" |
| "// `&'static str`은 읽기 전용 메모리에 할당된 문자열에 대한 참조입니다\n" |
| |
| #: src/scope/borrow/mut.md:17 |
| msgid "// This function takes a reference to a book\n" |
| msgstr "// 이 함수는 책에 대한 참조를 받습니다\n" |
| |
| #: src/scope/borrow/mut.md:20 |
| msgid "\"I immutably borrowed {} - {} edition\"" |
| msgstr "\"{} - {} 판을 불변으로 빌렸습니다\"" |
| |
| #: src/scope/borrow/mut.md:22 |
| msgid "" |
| "// This function takes a reference to a mutable book and changes `year` to " |
| "2014\n" |
| msgstr "" |
| "// 이 함수는 가변적인 책에 대한 참조를 받아 `year`를 2014로 변경합니다\n" |
| |
| #: src/scope/borrow/mut.md:26 |
| msgid "\"I mutably borrowed {} - {} edition\"" |
| msgstr "\"{} - {} 판을 가변으로 빌렸습니다\"" |
| |
| #: src/scope/borrow/mut.md:30 |
| msgid "// Create an immutable Book named `immutabook`\n" |
| msgstr "// `immutabook`이라는 이름의 불변 책을 생성합니다\n" |
| |
| #: src/scope/borrow/mut.md:32 |
| msgid "// string literals have type `&'static str`\n" |
| msgstr "// 문자열 리터럴은 `&'static str` 타입을 가집니다\n" |
| |
| #: src/scope/borrow/mut.md:33 |
| msgid "\"Douglas Hofstadter\"" |
| msgstr "\"더글라스 호프스태터\"" |
| |
| #: src/scope/borrow/mut.md:34 |
| msgid "\"Gödel, Escher, Bach\"" |
| msgstr "\"괴델, 에셔, 바흐\"" |
| |
| #: src/scope/borrow/mut.md:38 |
| msgid "// Create a mutable copy of `immutabook` and call it `mutabook`\n" |
| msgstr "// `immutabook`의 가변 복사본을 생성하고 `mutabook`이라고 부릅니다\n" |
| |
| #: src/scope/borrow/mut.md:41 |
| msgid "// Immutably borrow an immutable object\n" |
| msgstr "// 불변 객체를 불변으로 빌립니다\n" |
| |
| #: src/scope/borrow/mut.md:44 |
| msgid "// Immutably borrow a mutable object\n" |
| msgstr "// 가변 객체를 불변으로 빌립니다\n" |
| |
| #: src/scope/borrow/mut.md:47 |
| msgid "// Borrow a mutable object as mutable\n" |
| msgstr "// 가변 객체를 가변으로 빌립니다\n" |
| |
| #: src/scope/borrow/mut.md:50 |
| msgid "// Error! Cannot borrow an immutable object as mutable\n" |
| msgstr "// 에러! 불변 객체는 가변으로 빌릴 수 없습니다\n" |
| |
| #: src/scope/borrow/mut.md:58 |
| msgid "[`static`](../lifetime/static_lifetime.md)" |
| msgstr "[`static`](../lifetime/static_lifetime.md)" |
| |
| #: src/scope/borrow/alias.md:3 |
| msgid "" |
| "Data can be immutably borrowed any number of times, but while immutably " |
| "borrowed, the original data can't be mutably borrowed. On the other hand, " |
| "only _one_ mutable borrow is allowed at a time. The original data can be " |
| "borrowed again only _after_ the mutable reference has been used for the last " |
| "time." |
| msgstr "" |
| "데이터는 횟수에 제한 없이 불변으로 빌려질 수 있지만, 불변으로 빌려진 동안에" |
| "는 원본 데이터를 가변으로 빌릴 수 없습니다. 반면에, 가변 빌림은 한 번에 _하나" |
| "_만 허용됩니다. 원본 데이터는 가변 참조가 마지막으로 사용된 _후_에만 다시 빌" |
| "려질 수 있습니다." |
| |
| #: src/scope/borrow/alias.md:17 |
| msgid "// Data can be accessed via the references and the original owner\n" |
| msgstr "// 데이터는 참조와 원본 소유자를 통해 접근할 수 있습니다\n" |
| |
| #: src/scope/borrow/alias.md:18 src/scope/borrow/alias.md:27 |
| #: src/scope/borrow/alias.md:49 |
| msgid "\"Point has coordinates: ({}, {}, {})\"" |
| msgstr "\"점의 좌표: ({}, {}, {})\"" |
| |
| #: src/scope/borrow/alias.md:21 |
| msgid "" |
| "// Error! Can't borrow `point` as mutable because it's currently\n" |
| " // borrowed as immutable.\n" |
| " // let mutable_borrow = &mut point;\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! 현재 불변으로 빌려진 상태이기 때문에 `point`를 가변으로 빌릴 수 없습" |
| "니다.\n" |
| "// let mutable_borrow = &mut point;\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/scope/borrow/alias.md:26 |
| msgid "// The borrowed values are used again here\n" |
| msgstr "// 빌려온 값들이 여기서 다시 사용됩니다\n" |
| |
| #: src/scope/borrow/alias.md:30 |
| msgid "" |
| "// The immutable references are no longer used for the rest of the code so\n" |
| " // it is possible to reborrow with a mutable reference.\n" |
| msgstr "" |
| "// 불변 참조들이 코드의 나머지 부분에서 더 이상 사용되지 않으므로\n" |
| "// 가변 참조로 다시 빌리는 것이 가능합니다.\n" |
| |
| #: src/scope/borrow/alias.md:34 |
| msgid "// Change data via mutable reference\n" |
| msgstr "// 가변 참조를 통해 데이터를 변경합니다\n" |
| |
| #: src/scope/borrow/alias.md:39 |
| msgid "" |
| "// Error! Can't borrow `point` as immutable because it's currently\n" |
| " // borrowed as mutable.\n" |
| " // let y = &point.y;\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! 현재 가변으로 빌려진 상태이기 때문에 `point`를 불변으로 빌릴 수 없습" |
| "니다.\n" |
| "// let y = &point.y;\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/scope/borrow/alias.md:44 |
| msgid "" |
| "// Error! Can't print because `println!` takes an immutable reference.\n" |
| " // println!(\"Point Z coordinate is {}\", point.z);\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! `println!`은 불변 참조를 받기 때문에 출력할 수 없습니다.\n" |
| "// println!(\"점의 Z 좌표는 {}입니다\", point.z);\n" |
| "// TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/scope/borrow/alias.md:48 |
| msgid "// Ok! Mutable references can be passed as immutable to `println!`\n" |
| msgstr "// 좋습니다! 가변 참조는 불변 참조로 `println!`에 전달될 수 있습니다\n" |
| |
| #: src/scope/borrow/alias.md:52 |
| msgid "" |
| "// The mutable reference is no longer used for the rest of the code so it\n" |
| " // is possible to reborrow\n" |
| msgstr "" |
| "// 가변 참조가 코드의 나머지 부분에서 더 이상 사용되지 않으므로\n" |
| "// 다시 빌리는 것이 가능합니다\n" |
| |
| #: src/scope/borrow/alias.md:55 |
| msgid "\"Point now has coordinates: ({}, {}, {})\"" |
| msgstr "\"점은 이제 다음 좌표를 가집니다: ({}, {}, {})\"" |
| |
| #: src/scope/borrow/ref.md:3 |
| msgid "" |
| "When doing pattern matching or destructuring via the `let` binding, the " |
| "`ref` keyword can be used to take references to the fields of a struct/" |
| "tuple. The example below shows a few instances where this can be useful:" |
| msgstr "" |
| "`let` 바인딩을 통해 패턴 매칭이나 구조 분해를 수행할 때, `ref` 키워드를 사용" |
| "하여 구조체/튜플 필드에 대한 참조를 가져올 수 있습니다. 아래 예제는 이것이 유" |
| "용할 수 있는 몇 가지 사례를 보여줍니다:" |
| |
| #: src/scope/borrow/ref.md:14 |
| msgid "" |
| "// A `ref` borrow on the left side of an assignment is equivalent to\n" |
| " // an `&` borrow on the right side.\n" |
| msgstr "" |
| "// 할당의 왼쪽 편에 있는 `ref` 빌림은\n" |
| "// 오른쪽 편에 있는 `&` 빌림과 동일합니다.\n" |
| |
| #: src/scope/borrow/ref.md:19 |
| msgid "\"ref_c1 equals ref_c2: {}\"" |
| msgstr "\"ref_c1은 ref_c2와 같습니다: {}\"" |
| |
| #: src/scope/borrow/ref.md:23 |
| msgid "// `ref` is also valid when destructuring a struct.\n" |
| msgstr "// `ref`는 구조체를 구조 분해할 때도 유효합니다.\n" |
| |
| #: src/scope/borrow/ref.md:25 |
| msgid "// `ref_to_x` is a reference to the `x` field of `point`.\n" |
| msgstr "// `ref_to_x`는 `point`의 `x` 필드에 대한 참조입니다.\n" |
| |
| #: src/scope/borrow/ref.md:28 |
| msgid "// Return a copy of the `x` field of `point`.\n" |
| msgstr "// `point`의 `x` 필드 복사본을 반환합니다.\n" |
| |
| #: src/scope/borrow/ref.md:32 |
| msgid "// A mutable copy of `point`\n" |
| msgstr "// `point`의 가변 복사본\n" |
| |
| #: src/scope/borrow/ref.md:36 |
| msgid "// `ref` can be paired with `mut` to take mutable references.\n" |
| msgstr "// `ref`는 `mut`와 짝을 이루어 가변 참조를 가져올 수 있습니다.\n" |
| |
| #: src/scope/borrow/ref.md:39 |
| msgid "// Mutate the `y` field of `mutable_point` via a mutable reference.\n" |
| msgstr "// 가변 참조를 통해 `mutable_point`의 `y` 필드를 변경합니다.\n" |
| |
| #: src/scope/borrow/ref.md:43 |
| msgid "\"point is ({}, {})\"" |
| msgstr "\"point는 ({}, {})입니다\"" |
| |
| #: src/scope/borrow/ref.md:44 |
| msgid "\"mutable_point is ({}, {})\"" |
| msgstr "\"mutable_point는 ({}, {})입니다\"" |
| |
| #: src/scope/borrow/ref.md:46 |
| msgid "// A mutable tuple that includes a pointer\n" |
| msgstr "// 포인터를 포함하는 가변 튜플\n" |
| |
| #: src/scope/borrow/ref.md:50 |
| msgid "// Destructure `mutable_tuple` to change the value of `last`.\n" |
| msgstr "// `mutable_tuple`을 구조 분해하여 `last` 값을 변경합니다.\n" |
| |
| #: src/scope/borrow/ref.md:55 |
| msgid "\"tuple is {:?}\"" |
| msgstr "\"튜플은 {:?}입니다\"" |
| |
| #: src/scope/lifetime.md:3 |
| msgid "" |
| "A _lifetime_ is a construct the compiler (or more specifically, its _borrow " |
| "checker_) uses to ensure all borrows are valid. Specifically, a variable's " |
| "lifetime begins when it is created and ends when it is destroyed. While " |
| "lifetimes and scopes are often referred to together, they are not the same." |
| msgstr "" |
| "_라이프타임(lifetime)_은 컴파일러(더 구체적으로는 _빌림 검사기_)가 모든 빌림" |
| "이 유효한지 확인하기 위해 사용하는 구성 요소입니다. 구체적으로, 변수의 라이프" |
| "타임은 생성될 때 시작하고 파괴될 때 끝납니다. 라이프타임과 스코프는 종종 함" |
| "께 언급되지만, 같은 것은 아닙니다." |
| |
| #: src/scope/lifetime.md:8 |
| msgid "" |
| "Take, for example, the case where we borrow a variable via `&`. The borrow " |
| "has a lifetime that is determined by where it is declared. As a result, the " |
| "borrow is valid as long as it ends before the lender is destroyed. However, " |
| "the scope of the borrow is determined by where the reference is used." |
| msgstr "" |
| "예를 들어, `&`를 통해 변수를 빌리는 경우를 생각해 봅시다. 빌림은 선언된 위치" |
| "에 따라 결정되는 라이프타임을 가집니다. 결과적으로 빌림은 빌려준 대상이 파괴" |
| "되기 전에 끝나는 한 유효합니다. 하지만 빌림의 스코프는 참조가 사용되는 위치" |
| "에 따라 결정됩니다." |
| |
| #: src/scope/lifetime.md:13 |
| msgid "" |
| "In the following example and in the rest of this section, we will see how " |
| "lifetimes relate to scopes, as well as how the two differ." |
| msgstr "" |
| "다음 예제와 이 섹션의 나머지 부분에서 라이프타임이 스코프와 어떻게 관련되어 " |
| "있는지, 그리고 두 가지가 어떻게 다른지 살펴보겠습니다." |
| |
| #: src/scope/lifetime.md:17 |
| msgid "" |
| "// Lifetimes are annotated below with lines denoting the creation\n" |
| "// and destruction of each variable.\n" |
| "// `i` has the longest lifetime because its scope entirely encloses\n" |
| "// both `borrow1` and `borrow2`. The duration of `borrow1` compared\n" |
| "// to `borrow2` is irrelevant since they are disjoint.\n" |
| msgstr "" |
| "// 아래에는 각 변수의 생성과 파괴를 나타내는 선으로 라이프타임이 주석 처리되" |
| "어 있습니다.\n" |
| "// `i`의 스코프가 `borrow1`과 `borrow2`를 완전히 감싸고 있기 때문에\n" |
| "// `i`는 가장 긴 라이프타임을 가집니다. `borrow1`과 `borrow2`는 서로 겹치지 " |
| "않으므로\n" |
| "// 둘의 기간 비교는 무의미합니다.\n" |
| |
| #: src/scope/lifetime.md:23 |
| msgid "" |
| "// Lifetime for `i` starts. ────────────────┐\n" |
| " // │\n" |
| msgstr "" |
| "// `i`의 라이프타임 시작. ──────────────────┐\n" |
| " // │\n" |
| |
| #: src/scope/lifetime.md:25 src/scope/lifetime.md:32 |
| msgid "// │\n" |
| msgstr "// │\n" |
| |
| #: src/scope/lifetime.md:26 |
| msgid "" |
| "// `borrow1` lifetime starts. ──┐│\n" |
| " // ││\n" |
| msgstr "" |
| "// `borrow1` 라이프타임 시작. ──┐│\n" |
| " // ││\n" |
| |
| #: src/scope/lifetime.md:28 |
| msgid "\"borrow1: {}\"" |
| msgstr "\"borrow1: {}\"" |
| |
| #: src/scope/lifetime.md:28 src/scope/lifetime.md:35 |
| msgid "// ││\n" |
| msgstr "// ││\n" |
| |
| #: src/scope/lifetime.md:29 |
| msgid "" |
| "// `borrow1` ends. ─────────────────────────────────┘│\n" |
| " // │\n" |
| " // │\n" |
| msgstr "" |
| "// `borrow1` 끝. ───────────────────────────────────┘│\n" |
| " // │\n" |
| " // │\n" |
| |
| #: src/scope/lifetime.md:33 |
| msgid "" |
| "// `borrow2` lifetime starts. ──┐│\n" |
| " // ││\n" |
| msgstr "" |
| "// `borrow2` 라이프타임 시작. ──┐│\n" |
| " // ││\n" |
| |
| #: src/scope/lifetime.md:35 |
| msgid "\"borrow2: {}\"" |
| msgstr "\"borrow2: {}\"" |
| |
| #: src/scope/lifetime.md:36 |
| msgid "" |
| "// `borrow2` ends. ─────────────────────────────────┘│\n" |
| " // │\n" |
| msgstr "" |
| "// `borrow2` 끝. ───────────────────────────────────┘│\n" |
| " // │\n" |
| |
| #: src/scope/lifetime.md:38 |
| msgid "// Lifetime ends. ─────────────────────────────────────┘\n" |
| msgstr "// 라이프타임 끝. ─────────────────────────────────────┘\n" |
| |
| #: src/scope/lifetime.md:41 |
| msgid "" |
| "Note that no names or types are assigned to label lifetimes. This restricts " |
| "how lifetimes will be able to be used as we will see." |
| msgstr "" |
| "레이블 라이프타임에는 이름이나 타입이 할당되지 않는다는 점에 유의하세요. 이" |
| "는 앞으로 보게 될 것처럼 라이프타임을 사용하는 방식에 제한을 줍니다." |
| |
| #: src/scope/lifetime/explicit.md:3 |
| msgid "" |
| "The borrow checker uses explicit lifetime annotations to determine how long " |
| "references should be valid. In cases where lifetimes are not elided[^1], " |
| "Rust requires explicit annotations to determine what the lifetime of a " |
| "reference should be. The syntax for explicitly annotating a lifetime uses an " |
| "apostrophe character as follows:" |
| msgstr "" |
| "빌림 검사기는 참조가 얼마나 오래 유효해야 하는지 결정하기 위해 명시적 라이프" |
| "타임 어노테이션을 사용합니다. 라이프타임이 생략(elided)[^1]되지 않는 경우, " |
| "Rust는 참조의 라이프타임이 어떻게 되어야 하는지 결정하기 위해 명시적인 어노테" |
| "이션을 요구합니다. 라이프타임을 명시적으로 어노테이션하는 구문은 다음과 같이 " |
| "아포스트로피 문자를 사용합니다:" |
| |
| #: src/scope/lifetime/explicit.md:10 |
| msgid "// `foo` has a lifetime parameter `'a`\n" |
| msgstr "// `foo`는 라이프타임 파라미터 `'a`를 가집니다\n" |
| |
| #: src/scope/lifetime/explicit.md:14 |
| msgid "" |
| "Similar to [closures](../../fn/closures/anonymity.md), using lifetimes " |
| "requires generics. Additionally, this lifetime syntax indicates that the " |
| "lifetime of `foo` may not exceed that of `'a`. Explicit annotation of a type " |
| "has the form `&'a T` where `'a` has already been introduced." |
| msgstr "" |
| "[클로저](../../fn/closures/anonymity.md)와 유사하게, 라이프타임을 사용하려면 " |
| "제네릭이 필요합니다. 또한, 이 라이프타임 구문은 `foo`의 라이프타임이 `'a`의 " |
| "라이프타임을 초과할 수 없음을 나타냅니다. 타입의 명시적 어노테이션은 `&'a T` " |
| "형식을 가지며, 여기서 `'a`는 이미 도입된 라이프타임입니다." |
| |
| #: src/scope/lifetime/explicit.md:19 |
| msgid "In cases with multiple lifetimes, the syntax is similar:" |
| msgstr "여러 라이프타임이 있는 경우에도 구문은 유사합니다:" |
| |
| #: src/scope/lifetime/explicit.md:22 |
| msgid "// `foo` has lifetime parameters `'a` and `'b`\n" |
| msgstr "// `foo`는 라이프타임 파라미터 `'a`와 `'b`를 가집니다\n" |
| |
| #: src/scope/lifetime/explicit.md:26 |
| msgid "" |
| "In this case, the lifetime of `foo` cannot exceed that of either `'a` _or_ " |
| "`'b`." |
| msgstr "" |
| "이 경우, `foo`의 라이프타임은 `'a` _또는_ `'b` 중 어느 하나의 라이프타임도 초" |
| "과할 수 없습니다." |
| |
| #: src/scope/lifetime/explicit.md:28 |
| msgid "See the following example for explicit lifetime annotation in use:" |
| msgstr "명시적 라이프타임 어노테이션이 사용된 다음 예제를 참조하세요:" |
| |
| #: src/scope/lifetime/explicit.md:31 |
| msgid "" |
| "// `print_refs` takes two references to `i32` which have different\n" |
| "// lifetimes `'a` and `'b`. These two lifetimes must both be at\n" |
| "// least as long as the function `print_refs`.\n" |
| msgstr "" |
| "// `print_refs`는 서로 다른 라이프타임 `'a`와 `'b`를 가진\n" |
| "// 두 개의 `i32` 참조를 받습니다. 이 두 라이프타임은 모두\n" |
| "// 적어도 `print_refs` 함수만큼 길어야 합니다.\n" |
| |
| #: src/scope/lifetime/explicit.md:35 |
| msgid "\"x is {} and y is {}\"" |
| msgstr "\"x는 {}이고 y는 {}입니다\"" |
| |
| #: src/scope/lifetime/explicit.md:37 |
| msgid "" |
| "// A function which takes no arguments, but has a lifetime parameter `'a`.\n" |
| msgstr "// 인자를 받지 않지만 라이프타임 파라미터 `'a`를 가진 함수입니다.\n" |
| |
| #: src/scope/lifetime/explicit.md:42 |
| msgid "// ERROR: `_x` does not live long enough\n" |
| msgstr "// 에러: `_x`의 수명이 충분히 길지 않습니다\n" |
| |
| #: src/scope/lifetime/explicit.md:44 |
| msgid "" |
| "// Attempting to use the lifetime `'a` as an explicit type annotation\n" |
| " // inside the function will fail because the lifetime of `&_x` is " |
| "shorter\n" |
| " // than that of `_y`. A short lifetime cannot be coerced into a longer " |
| "one.\n" |
| msgstr "" |
| "// 함수 내부에서 라이프타임 `'a`를 명시적 타입 어노테이션으로 사용하려고 하" |
| "면\n" |
| " // 실패합니다. `&_x`의 라이프타임이 `_y`의 라이프타임보다 짧기 때문입니" |
| "다.\n" |
| " // 짧은 라이프타임은 더 긴 라이프타임으로 강제 변환될 수 없습니다.\n" |
| |
| #: src/scope/lifetime/explicit.md:50 |
| msgid "// Create variables to be borrowed below.\n" |
| msgstr "// 아래에서 빌려올 변수들을 생성합니다.\n" |
| |
| #: src/scope/lifetime/explicit.md:53 |
| msgid "// Borrows (`&`) of both variables are passed into the function.\n" |
| msgstr "// 두 변수의 빌림(`&`)이 함수로 전달됩니다.\n" |
| |
| #: src/scope/lifetime/explicit.md:55 |
| msgid "" |
| "// Any input which is borrowed must outlive the borrower.\n" |
| " // In other words, the lifetime of `four` and `nine` must\n" |
| " // be longer than that of `print_refs`.\n" |
| msgstr "" |
| "// 빌려온 모든 입력은 빌리는 주체보다 오래 살아야 합니다.\n" |
| " // 다시 말해, `four`와 `nine`의 라이프타임은\n" |
| " // `print_refs`의 라이프타임보다 길어야 합니다.\n" |
| |
| #: src/scope/lifetime/explicit.md:60 |
| msgid "" |
| "// `failed_borrow` contains no references to force `'a` to be\n" |
| " // longer than the lifetime of the function, but `'a` is longer.\n" |
| " // Because the lifetime is never constrained, it defaults to `'static`.\n" |
| msgstr "" |
| "// `failed_borrow`는 `'a`가 함수의 라이프타임보다 길어야 함을 강제하는\n" |
| "// 참조를 포함하지 않지만, `'a`는 더 깁니다.\n" |
| "// 라이프타임이 결코 제약되지 않으므로, 이는 `'static`으로 기본 설정됩니다.\n" |
| |
| #: src/scope/lifetime/explicit.md:66 |
| msgid "" |
| "[elision](elision.md) implicitly annotates lifetimes and so is different." |
| msgstr "" |
| "[생략(elision)](elision.md)은 암시적으로 라이프타임을 어노테이션하므로 다릅니" |
| "다." |
| |
| #: src/scope/lifetime/explicit.md:70 |
| msgid "[generics](../../generics.md) and [closures](../../fn/closures.md)" |
| msgstr "[제네릭](../../generics.md) 및 [클로저](../../fn/closures.md)" |
| |
| #: src/scope/lifetime/fn.md:3 |
| msgid "" |
| "Ignoring [elision](elision.md), function signatures with lifetimes have a " |
| "few constraints:" |
| msgstr "" |
| "[생략](elision.md)을 무시하고, 라이프타임을 가진 함수 시그니처에는 몇 가지 제" |
| "약 사항이 있습니다:" |
| |
| #: src/scope/lifetime/fn.md:5 |
| msgid "any reference _must_ have an annotated lifetime." |
| msgstr "모든 참조는 _반드시_ 어노테이션된 라이프타임을 가져야 합니다." |
| |
| #: src/scope/lifetime/fn.md:6 |
| msgid "" |
| "any reference being returned _must_ have the same lifetime as an input or be " |
| "`static`." |
| msgstr "" |
| "반환되는 모든 참조는 입력과 동일한 라이프타임을 가지거나 `static`이어야 _합니" |
| "다_." |
| |
| #: src/scope/lifetime/fn.md:9 |
| msgid "" |
| "Additionally, note that returning references without input is banned if it " |
| "would result in returning references to invalid data. The following example " |
| "shows off some valid forms of functions with lifetimes:" |
| msgstr "" |
| "또한, 입력 없이 참조를 반환하는 것이 유효하지 않은 데이터에 대한 참조를 반환" |
| "하는 결과를 낳는다면 금지된다는 점에 유의하세요. 다음 예제는 라이프타임이 있" |
| "는 유효한 함수 형태를 보여줍니다:" |
| |
| #: src/scope/lifetime/fn.md:14 |
| msgid "" |
| "// One input reference with lifetime `'a` which must live\n" |
| "// at least as long as the function.\n" |
| msgstr "" |
| "// 라이프타임 `'a`를 가진 하나의 입력 참조입니다.\n" |
| "// 이 참조는 적어도 함수만큼 오래 살아야 합니다.\n" |
| |
| #: src/scope/lifetime/fn.md:17 |
| msgid "\"`print_one`: x is {}\"" |
| msgstr "\"`print_one`: x는 {}입니다\"" |
| |
| #: src/scope/lifetime/fn.md:19 |
| msgid "// Mutable references are possible with lifetimes as well.\n" |
| msgstr "// 가변 참조도 라이프타임과 함께 사용할 수 있습니다.\n" |
| |
| #: src/scope/lifetime/fn.md:24 |
| msgid "" |
| "// Multiple elements with different lifetimes. In this case, it\n" |
| "// would be fine for both to have the same lifetime `'a`, but\n" |
| "// in more complex cases, different lifetimes may be required.\n" |
| msgstr "" |
| "// 서로 다른 라이프타임을 가진 여러 요소들입니다. 이 경우,\n" |
| "// 둘 다 동일한 라이프타임 `'a`를 가져도 괜찮지만,\n" |
| "// 더 복잡한 경우에는 서로 다른 라이프타임이 필요할 수 있습니다.\n" |
| |
| #: src/scope/lifetime/fn.md:29 |
| msgid "\"`print_multi`: x is {}, y is {}\"" |
| msgstr "\"`print_multi`: x는 {}, y는 {}입니다\"" |
| |
| #: src/scope/lifetime/fn.md:31 |
| msgid "" |
| "// Returning references that have been passed in is acceptable.\n" |
| "// However, the correct lifetime must be returned.\n" |
| msgstr "" |
| "// 전달된 참조를 반환하는 것은 허용됩니다.\n" |
| "// 하지만, 올바른 라이프타임이 반환되어야 합니다.\n" |
| |
| #: src/scope/lifetime/fn.md:35 |
| msgid "" |
| "//fn invalid_output<'a>() -> &'a String { &String::from(\"foo\") }\n" |
| "// The above is invalid: `'a` must live longer than the function.\n" |
| "// Here, `&String::from(\"foo\")` would create a `String`, followed by a\n" |
| "// reference. Then the data is dropped upon exiting the scope, leaving\n" |
| "// a reference to invalid data to be returned.\n" |
| msgstr "" |
| "//fn invalid_output<'a>() -> &'a String { &String::from(\"foo\") }\n" |
| "// 위 코드는 유효하지 않습니다: `'a`는 함수보다 오래 살아야 합니다.\n" |
| "// 여기서 `&String::from(\"foo\")`는 `String`을 생성한 후 참조를 생성합니" |
| "다.\n" |
| "// 그런 다음 스코프를 벗어날 때 데이터가 드롭되어,\n" |
| "// 유효하지 않은 데이터에 대한 참조가 반환됩니다.\n" |
| |
| #: src/scope/lifetime/fn.md:60 |
| msgid "[Functions](../../fn.md)" |
| msgstr "[함수](../../fn.md)" |
| |
| #: src/scope/lifetime/methods.md:3 |
| msgid "Methods are annotated similarly to functions:" |
| msgstr "메서드는 함수와 유사하게 어노테이션됩니다:" |
| |
| #: src/scope/lifetime/methods.md:9 |
| msgid "// Annotate lifetimes as in a standalone function.\n" |
| msgstr "// 독립형 함수처럼 라이프타임을 어노테이션합니다.\n" |
| |
| #: src/scope/lifetime/methods.md:12 |
| msgid "\"`print`: {}\"" |
| msgstr "\"`print`: {}\"" |
| |
| #: src/scope/lifetime/methods.md:26 |
| msgid "[methods](../../fn/methods.md)" |
| msgstr "[메서드](../../fn/methods.md)" |
| |
| #: src/scope/lifetime/struct.md:3 |
| msgid "Annotation of lifetimes in structures are also similar to functions:" |
| msgstr "구조체에서의 라이프타임 어노테이션도 함수와 비슷합니다:" |
| |
| #: src/scope/lifetime/struct.md:6 |
| msgid "" |
| "// A type `Borrowed` which houses a reference to an\n" |
| "// `i32`. The reference to `i32` must outlive `Borrowed`.\n" |
| msgstr "" |
| "// `i32`에 대한 참조를 보관하는 `Borrowed` 타입입니다.\n" |
| "// `i32`에 대한 참조는 `Borrowed`보다 오래 살아야 합니다.\n" |
| |
| #: src/scope/lifetime/struct.md:10 |
| msgid "// Similarly, both references here must outlive this structure.\n" |
| msgstr "// 마찬가지로, 여기의 두 참조는 이 구조체보다 오래 살아야 합니다.\n" |
| |
| #: src/scope/lifetime/struct.md:17 |
| msgid "// An enum which is either an `i32` or a reference to one.\n" |
| msgstr "// `i32`이거나 이에 대한 참조인 열거형입니다.\n" |
| |
| #: src/scope/lifetime/struct.md:34 src/scope/lifetime/struct.md:36 |
| msgid "\"x is borrowed in {:?}\"" |
| msgstr "\"x는 {:?}에서 빌려졌습니다\"" |
| |
| #: src/scope/lifetime/struct.md:35 |
| msgid "\"x and y are borrowed in {:?}\"" |
| msgstr "\"x와 y는 {:?}에서 빌려졌습니다\"" |
| |
| #: src/scope/lifetime/struct.md:37 |
| msgid "\"y is *not* borrowed in {:?}\"" |
| msgstr "\"y는 {:?}에서 빌려지지 *않았습니다*\"" |
| |
| #: src/scope/lifetime/struct.md:43 |
| msgid "[`struct`s](../../custom_types/structs.md)" |
| msgstr "[`struct`](../../custom_types/structs.md)" |
| |
| #: src/scope/lifetime/trait.md:3 |
| msgid "" |
| "Annotation of lifetimes in trait methods basically are similar to functions. " |
| "Note that `impl` may have annotation of lifetimes too." |
| msgstr "" |
| "트레이트 메서드의 라이프타임 어노테이션은 기본적으로 함수와 유사합니다. " |
| "`impl`도 라이프타임 어노테이션을 가질 수 있음에 유의하세요." |
| |
| #: src/scope/lifetime/trait.md:7 |
| msgid "// A struct with annotation of lifetimes.\n" |
| msgstr "// 라이프타임 어노테이션이 있는 구조체.\n" |
| |
| #: src/scope/lifetime/trait.md:12 |
| msgid "// Annotate lifetimes to impl.\n" |
| msgstr "// impl에 라이프타임을 어노테이션합니다.\n" |
| |
| #: src/scope/lifetime/trait.md:24 |
| msgid "\"b is {:?}\"" |
| msgstr "\"b는 {:?}입니다\"" |
| |
| #: src/scope/lifetime/trait.md:30 |
| msgid "[`trait`s](../../trait.md)" |
| msgstr "[`trait`](../../trait.md)" |
| |
| #: src/scope/lifetime/lifetime_bounds.md:3 |
| msgid "" |
| "Just like generic types can be bounded, lifetimes (themselves generic) use " |
| "bounds as well. The `:` character has a slightly different meaning here, but " |
| "`+` is the same. Note how the following read:" |
| msgstr "" |
| "제네릭 타입이 바운드될 수 있는 것처럼, (그 자체로 제네릭인) 라이프타임도 바운" |
| "드를 사용합니다. 여기서 `:` 문자는 약간 다른 의미를 갖지만, `+`는 동일합니" |
| "다. 다음이 어떻게 읽히는지 주목하세요:" |
| |
| #: src/scope/lifetime/lifetime_bounds.md:7 |
| msgid "`T: 'a`: _All_ references in `T` must outlive lifetime `'a`." |
| msgstr "" |
| "`T: 'a`: `T` 내의 _모든_ 참조는 라이프타임 `'a`보다 오래 살아야 합니다." |
| |
| #: src/scope/lifetime/lifetime_bounds.md:8 |
| msgid "" |
| "`T: Trait + 'a`: Type `T` must implement trait `Trait` and _all_ references " |
| "in `T` must outlive `'a`." |
| msgstr "" |
| "`T: Trait + 'a`: 타입 `T`는 트레이트 `Trait`를 구현해야 하며, `T` 내의 _모든" |
| "_ 참조는 `'a`보다 오래 살아야 합니다." |
| |
| #: src/scope/lifetime/lifetime_bounds.md:11 |
| msgid "" |
| "The example below shows the above syntax in action used after keyword " |
| "`where`:" |
| msgstr "" |
| "아래 예제는 `where` 키워드 뒤에 사용된 위 구문의 실제 사용 예를 보여줍니다:" |
| |
| #: src/scope/lifetime/lifetime_bounds.md:14 |
| msgid "// Trait to bound with.\n" |
| msgstr "// 바운드할 트레이트.\n" |
| |
| #: src/scope/lifetime/lifetime_bounds.md:17 |
| msgid "" |
| "// `Ref` contains a reference to a generic type `T` that has\n" |
| "// some lifetime `'a` unknown by `Ref`. `T` is bounded such that any\n" |
| "// *references* in `T` must outlive `'a`. Additionally, the lifetime\n" |
| "// of `Ref` may not exceed `'a`.\n" |
| msgstr "" |
| "// `Ref`는 `Ref`가 알 수 없는 어떤 라이프타임 `'a`를 가진 제네릭 타입 `T`에 " |
| "대한\n" |
| "// 참조를 포함합니다. `T`는 `T` 내부의 모든 *참조*가 `'a`보다 오래 살아야 한" |
| "다는\n" |
| "// 바운드를 가집니다. 추가적으로, `Ref`의 라이프타임은 `'a`를 초과할 수 없습" |
| "니다.\n" |
| |
| #: src/scope/lifetime/lifetime_bounds.md:22 |
| msgid "// A generic function which prints using the `Debug` trait.\n" |
| msgstr "// `Debug` 트레이트를 사용하여 출력하는 제네릭 함수.\n" |
| |
| #: src/scope/lifetime/lifetime_bounds.md:26 |
| msgid "\"`print`: t is {:?}\"" |
| msgstr "\"`print`: t는 {:?}입니다\"" |
| |
| #: src/scope/lifetime/lifetime_bounds.md:28 |
| msgid "" |
| "// Here a reference to `T` is taken where `T` implements\n" |
| "// `Debug` and all *references* in `T` outlive `'a`. In\n" |
| "// addition, `'a` must outlive the function.\n" |
| msgstr "" |
| "// 여기서 `T`는 `Debug`를 구현하고 `T`의 모든 *참조*가 `'a`보다 오래 사는\n" |
| "// `T`에 대한 참조를 받습니다. 또한, `'a`는 함수보다 오래 살아야 합니다.\n" |
| |
| #: src/scope/lifetime/lifetime_bounds.md:34 |
| msgid "\"`print_ref`: t is {:?}\"" |
| msgstr "\"`print_ref`: t는 {:?}입니다\"" |
| |
| #: src/scope/lifetime/lifetime_bounds.md:48 |
| msgid "" |
| "[generics](../../generics.md), [bounds in generics](../../generics/" |
| "bounds.md), and [multiple bounds in generics](../../generics/multi_bounds.md)" |
| msgstr "" |
| "[제네릭](../../generics.md), [제네릭의 바운드](../../generics/bounds.md), 그" |
| "리고 [제네릭의 다중 바운드](../../generics/multi_bounds.md)" |
| |
| #: src/scope/lifetime/lifetime_coercion.md:3 |
| msgid "" |
| "A longer lifetime can be coerced into a shorter one so that it works inside " |
| "a scope it normally wouldn't work in. This comes in the form of inferred " |
| "coercion by the Rust compiler, and also in the form of declaring a lifetime " |
| "difference:" |
| msgstr "" |
| "더 긴 라이프타임은 평소에는 작동하지 않을 스코프 내에서도 작동하도록 더 짧은 " |
| "라이프타임으로 강제 변환(coerced)될 수 있습니다. 이는 Rust 컴파일러에 의한 추" |
| "론된 강제 변환 형태와 라이프타임 차이를 선언하는 형태로 나타납니다:" |
| |
| #: src/scope/lifetime/lifetime_coercion.md:9 |
| msgid "" |
| "// Here, Rust infers a lifetime that is as short as possible.\n" |
| "// The two references are then coerced to that lifetime.\n" |
| msgstr "" |
| "// 여기서 Rust는 가능한 한 짧은 라이프타임을 추론합니다.\n" |
| "// 그 후 두 참조는 해당 라이프타임으로 강제 변환됩니다.\n" |
| |
| #: src/scope/lifetime/lifetime_coercion.md:14 |
| msgid "" |
| "// `<'a: 'b, 'b>` reads as lifetime `'a` is at least as long as `'b`.\n" |
| "// Here, we take in an `&'a i32` and return a `&'b i32` as a result of " |
| "coercion.\n" |
| msgstr "" |
| "// `<'a: 'b, 'b>`는 라이프타임 `'a`가 적어도 `'b`만큼 길다는 뜻으로 읽힙니" |
| "다.\n" |
| "// 여기서 우리는 `&'a i32`를 받아 강제 변환의 결과로 `&'b i32`를 반환합니" |
| "다.\n" |
| |
| #: src/scope/lifetime/lifetime_coercion.md:22 |
| msgid "// Longer lifetime\n" |
| msgstr "// 더 긴 라이프타임\n" |
| |
| #: src/scope/lifetime/lifetime_coercion.md:25 |
| msgid "// Shorter lifetime\n" |
| msgstr "// 더 짧은 라이프타임\n" |
| |
| #: src/scope/lifetime/lifetime_coercion.md:27 |
| msgid "\"The product is {}\"" |
| msgstr "\"곱은 {}입니다\"" |
| |
| #: src/scope/lifetime/lifetime_coercion.md:28 |
| msgid "\"{} is the first\"" |
| msgstr "\"{}은(는) 첫 번째입니다\"" |
| |
| #: src/scope/lifetime/static_lifetime.md:3 |
| msgid "" |
| "Rust has a few reserved lifetime names. One of those is `'static`. You might " |
| "encounter it in two situations:" |
| msgstr "" |
| "Rust에는 몇 가지 예약된 라이프타임 이름이 있습니다. 그중 하나가 `'static`입니" |
| "다. 두 가지 상황에서 이를 마주칠 수 있습니다:" |
| |
| #: src/scope/lifetime/static_lifetime.md:7 |
| msgid "// A reference with 'static lifetime:\n" |
| msgstr "// 'static 라이프타임을 가진 참조:\n" |
| |
| #: src/scope/lifetime/static_lifetime.md:8 |
| msgid "\"hello world\"" |
| msgstr "\"안녕 세상\"" |
| |
| #: src/scope/lifetime/static_lifetime.md:9 |
| msgid "// 'static as part of a trait bound:\n" |
| msgstr "// 트레이트 바운드의 일부로서의 'static:\n" |
| |
| #: src/scope/lifetime/static_lifetime.md:14 |
| msgid "" |
| "Both are related but subtly different and this is a common source for " |
| "confusion when learning Rust. Here are some examples for each situation:" |
| msgstr "" |
| "두 가지는 관련이 있지만 미묘하게 다르며, 이는 Rust를 배울 때 흔한 혼란의 원인" |
| "이 됩니다. 각 상황에 대한 몇 가지 예시를 소개합니다:" |
| |
| #: src/scope/lifetime/static_lifetime.md:17 |
| msgid "Reference lifetime" |
| msgstr "참조 라이프타임" |
| |
| #: src/scope/lifetime/static_lifetime.md:19 |
| msgid "" |
| "As a reference lifetime `'static` indicates that the data pointed to by the " |
| "reference lives for the remaining lifetime of the running program. It can " |
| "still be coerced to a shorter lifetime." |
| msgstr "" |
| "참조 라이프타임으로서 `'static`은 참조가 가리키는 데이터가 실행 중인 프로그램" |
| "의 남은 수명 동안 살아있음을 나타냅니다. 여전히 더 짧은 라이프타임으로 강제 " |
| "변환될 수 있습니다." |
| |
| #: src/scope/lifetime/static_lifetime.md:23 |
| msgid "" |
| "There are two common ways to make a variable with `'static` lifetime, and " |
| "both are stored in the read-only memory of the binary:" |
| msgstr "" |
| "`'static` 라이프타임을 가진 변수를 만드는 두 가지 일반적인 방법이 있으며, 둘 " |
| "다 바이너리의 읽기 전용 메모리에 저장됩니다:" |
| |
| #: src/scope/lifetime/static_lifetime.md:26 |
| msgid "Make a constant with the `static` declaration." |
| msgstr "`static` 선언으로 상수를 만듭니다." |
| |
| #: src/scope/lifetime/static_lifetime.md:27 |
| msgid "Make a `string` literal which has type: `&'static str`." |
| msgstr "`&'static str` 타입을 갖는 `문자열` 리터럴을 만듭니다." |
| |
| #: src/scope/lifetime/static_lifetime.md:29 |
| msgid "See the following example for a display of each method:" |
| msgstr "각 방법에 대한 예제는 다음을 참조하세요:" |
| |
| #: src/scope/lifetime/static_lifetime.md:32 |
| msgid "// Make a constant with `'static` lifetime.\n" |
| msgstr "// `'static` 라이프타임을 가진 상수를 만듭니다.\n" |
| |
| #: src/scope/lifetime/static_lifetime.md:34 |
| msgid "" |
| "// Returns a reference to `NUM` where its `'static`\n" |
| "// lifetime is coerced to that of the input argument.\n" |
| msgstr "" |
| "// `NUM`에 대한 참조를 반환합니다. 여기서 `NUM`의 `'static`\n" |
| "// 라이프타임은 입력 인자의 라이프타임으로 강제 변환됩니다.\n" |
| |
| #: src/scope/lifetime/static_lifetime.md:43 |
| msgid "// Make a `string` literal and print it:\n" |
| msgstr "// `문자열` 리터럴을 만들고 출력합니다:\n" |
| |
| #: src/scope/lifetime/static_lifetime.md:44 |
| msgid "\"I'm in read-only memory\"" |
| msgstr "\"저는 읽기 전용 메모리에 있습니다\"" |
| |
| #: src/scope/lifetime/static_lifetime.md:45 |
| msgid "\"static_string: {}\"" |
| msgstr "\"static_string: {}\"" |
| |
| #: src/scope/lifetime/static_lifetime.md:47 |
| msgid "" |
| "// When `static_string` goes out of scope, the reference\n" |
| " // can no longer be used, but the data remains in the binary.\n" |
| msgstr "" |
| "// `static_string`이 스코프를 벗어나면, 참조는\n" |
| "// 더 이상 사용할 수 없지만, 데이터는 바이너리에 남아 있습니다.\n" |
| |
| #: src/scope/lifetime/static_lifetime.md:52 |
| msgid "// Make an integer to use for `coerce_static`:\n" |
| msgstr "// `coerce_static`에 사용할 정수를 만듭니다:\n" |
| |
| #: src/scope/lifetime/static_lifetime.md:55 |
| msgid "// Coerce `NUM` to lifetime of `lifetime_num`:\n" |
| msgstr "// `NUM`을 `lifetime_num`의 라이프타임으로 강제 변환합니다:\n" |
| |
| #: src/scope/lifetime/static_lifetime.md:58 |
| msgid "\"coerced_static: {}\"" |
| msgstr "\"강제 변환된 static: {}\"" |
| |
| #: src/scope/lifetime/static_lifetime.md:61 |
| msgid "\"NUM: {} stays accessible!\"" |
| msgstr "\"NUM: {} 여전히 접근 가능합니다!\"" |
| |
| #: src/scope/lifetime/static_lifetime.md:65 |
| msgid "" |
| "Since `'static` references only need to be valid for the _remainder_ of a " |
| "program's life, they can be created while the program is executed. Just to " |
| "demonstrate, the below example uses [`Box::leak`](https://doc.rust-lang.org/" |
| "std/boxed/struct.Box.html#method.leak) to dynamically create `'static` " |
| "references. In that case it definitely doesn't live for the entire duration, " |
| "but only from the leaking point onward." |
| msgstr "" |
| "`'static` 참조는 프로그램 수명의 _나머지_ 기간 동안만 유효하면 되므로, 프로그" |
| "램이 실행되는 동안 생성될 수 있습니다. 아래 예제는 [`Box::leak`](https://" |
| "doc.rust-lang.org/std/boxed/struct.Box.html#method.leak)를 사용하여 " |
| "`'static` 참조를 동적으로 생성하는 방법을 보여줍니다. 이 경우 전체 기간 동안 " |
| "살아있는 것은 아니지만, 누수 지점부터는 계속 살아있습니다." |
| |
| #: src/scope/lifetime/static_lifetime.md:90 |
| msgid "Trait bound" |
| msgstr "트레이트 바운드" |
| |
| #: src/scope/lifetime/static_lifetime.md:92 |
| msgid "" |
| "As a trait bound, it means the type does not contain any non-static " |
| "references. Eg. the receiver can hold on to the type for as long as they " |
| "want and it will never become invalid until they drop it." |
| msgstr "" |
| "트레이트 바운드로서, 이는 해당 타입이 정적이지 않은(non-static) 참조를 포함하" |
| "지 않음을 의미합니다. 예를 들어, 수신자는 원하는 만큼 해당 타입을 보유할 수 " |
| "있으며, 드롭할 때까지 절대 유효하지 않게 되지 않습니다." |
| |
| #: src/scope/lifetime/static_lifetime.md:96 |
| msgid "" |
| "It's important to understand this means that any owned data always passes a " |
| "`'static` lifetime bound, but a reference to that owned data generally does " |
| "not:" |
| msgstr "" |
| "이것이 의미하는 바를 이해하는 것이 중요합니다. 모든 소유된 데이터는 항상 " |
| "`'static` 라이프타임 바운드를 통과하지만, 소유된 데이터에 대한 참조는 일반적" |
| "으로 그렇지 않습니다:" |
| |
| #: src/scope/lifetime/static_lifetime.md:104 |
| msgid "\"'static value passed in is: {:?}\"" |
| msgstr "\"'static 값이 전달되었습니다: {:?}\"" |
| |
| #: src/scope/lifetime/static_lifetime.md:108 |
| msgid "// i is owned and contains no references, thus it's 'static:\n" |
| msgstr "// i는 소유된 데이터이며 참조를 포함하지 않으므로 'static입니다:\n" |
| |
| #: src/scope/lifetime/static_lifetime.md:112 |
| msgid "" |
| "// oops, &i only has the lifetime defined by the scope of\n" |
| " // main(), so it's not 'static:\n" |
| msgstr "" |
| "// 이런, &i는 main()의 스코프에 의해 정의된 라이프타임만\n" |
| "// 가지므로 'static이 아닙니다:\n" |
| |
| #: src/scope/lifetime/static_lifetime.md:118 |
| msgid "The compiler will tell you:" |
| msgstr "컴파일러는 다음과 같이 알려줄 것입니다:" |
| |
| #: src/scope/lifetime/static_lifetime.md:135 |
| msgid "[`'static` constants](../../custom_types/constants.md)" |
| msgstr "[`'static` 상수](../../custom_types/constants.md)" |
| |
| #: src/scope/lifetime/elision.md:3 |
| msgid "" |
| "Some lifetime patterns are overwhelmingly common and so the borrow checker " |
| "will allow you to omit them to save typing and to improve readability. This " |
| "is known as elision. Elision exists in Rust solely because these patterns " |
| "are common." |
| msgstr "" |
| "일부 라이프타임 패턴은 압도적으로 흔해서, 빌림 검사기는 타이핑을 줄이고 가독" |
| "성을 높이기 위해 이를 생략할 수 있게 해줍니다. 이를 생략(elision)이라고 합니" |
| "다. 생략은 오직 이러한 패턴이 흔하다는 이유만으로 Rust에 존재합니다." |
| |
| #: src/scope/lifetime/elision.md:8 |
| msgid "" |
| "The following code shows a few examples of elision. For a more comprehensive " |
| "description of elision, see [lifetime elision](https://doc.rust-lang.org/" |
| "book/ch10-03-lifetime-syntax.html#lifetime-elision) in the book." |
| msgstr "" |
| "다음 코드는 생략의 몇 가지 예시를 보여줍니다. 생략에 대한 더 포괄적인 설명은 " |
| "책의 [라이프타임 생략](https://doc.rust-lang.org/book/ch10-03-lifetime-" |
| "syntax.html#lifetime-elision)을 참조하세요." |
| |
| #: src/scope/lifetime/elision.md:12 |
| msgid "" |
| "// `elided_input` and `annotated_input` essentially have identical " |
| "signatures\n" |
| "// because the lifetime of `elided_input` is inferred by the compiler:\n" |
| msgstr "" |
| "// `elided_input`과 `annotated_input`은 본질적으로 동일한 시그니처를 가집니" |
| "다.\n" |
| "// `elided_input`의 라이프타임이 컴파일러에 의해 추론되기 때문입니다:\n" |
| |
| #: src/scope/lifetime/elision.md:15 |
| msgid "\"`elided_input`: {}\"" |
| msgstr "\"`elided_input`: {}\"" |
| |
| #: src/scope/lifetime/elision.md:19 |
| msgid "\"`annotated_input`: {}\"" |
| msgstr "\"`annotated_input`: {}\"" |
| |
| #: src/scope/lifetime/elision.md:21 |
| msgid "" |
| "// Similarly, `elided_pass` and `annotated_pass` have identical signatures\n" |
| "// because the lifetime is added implicitly to `elided_pass`:\n" |
| msgstr "" |
| "// 마찬가지로, `elided_pass`와 `annotated_pass`는 동일한 시그니처를 가집니" |
| "다.\n" |
| "// 라이프타임이 `elided_pass`에 암시적으로 추가되기 때문입니다:\n" |
| |
| #: src/scope/lifetime/elision.md:34 |
| msgid "\"`elided_pass`: {}\"" |
| msgstr "\"`elided_pass`: {}\"" |
| |
| #: src/scope/lifetime/elision.md:35 |
| msgid "\"`annotated_pass`: {}\"" |
| msgstr "\"`annotated_pass`: {}\"" |
| |
| #: src/scope/lifetime/elision.md:41 |
| msgid "" |
| "[elision](https://doc.rust-lang.org/book/ch10-03-lifetime-" |
| "syntax.html#lifetime-elision)" |
| msgstr "" |
| "[생략](https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html#lifetime-" |
| "elision)" |
| |
| #: src/trait.md:3 |
| msgid "" |
| "A `trait` is a collection of methods defined for an unknown type: `Self`. " |
| "They can access other methods declared in the same trait." |
| msgstr "" |
| "`trait`는 알 수 없는 타입 `Self`에 대해 정의된 메서드들의 모음입니다. 이들은 " |
| "동일한 트레이트 내에 선언된 다른 메서드에 접근할 수 있습니다." |
| |
| #: src/trait.md:6 |
| msgid "" |
| "Traits can be implemented for any data type. In the example below, we define " |
| "`Animal`, a group of methods. The `Animal` `trait` is then implemented for " |
| "the `Sheep` data type, allowing the use of methods from `Animal` with a " |
| "`Sheep`." |
| msgstr "" |
| "트레이트는 모든 데이터 타입에 대해 구현될 수 있습니다. 아래 예제에서는 메서" |
| "드 그룹인 `Animal`을 정의합니다. 그런 다음 `Animal` `trait`를 `Sheep` 데이터 " |
| "타입에 대해 구현하여 `Sheep`으로 `Animal`의 메서드를 사용할 수 있게 합니다." |
| |
| #: src/trait.md:15 |
| msgid "" |
| "// Associated function signature; `Self` refers to the implementor type.\n" |
| msgstr "// 연관 함수 시그니처; `Self`는 구현하는 타입을 가리킵니다.\n" |
| |
| #: src/trait.md:18 |
| msgid "// Method signatures; these will return a string.\n" |
| msgstr "// 메서드 시그니처; 이들은 문자열을 반환할 것입니다.\n" |
| |
| #: src/trait.md:22 |
| msgid "// Traits can provide default method definitions.\n" |
| msgstr "// 트레이트는 기본 메서드 정의를 제공할 수 있습니다.\n" |
| |
| #: src/trait.md:24 |
| msgid "\"{} says {}\"" |
| msgstr "\"{}가 말하길 {}\"" |
| |
| #: src/trait.md:35 |
| msgid "// Implementor methods can use the implementor's trait methods.\n" |
| msgstr "// 구현자의 메서드는 구현자의 트레이트 메서드를 사용할 수 있습니다.\n" |
| |
| #: src/trait.md:36 |
| msgid "\"{} is already naked...\"" |
| msgstr "\"{}는 이미 벌거벗었습니다...\"" |
| |
| #: src/trait.md:38 |
| msgid "\"{} gets a haircut!\"" |
| msgstr "\"{}가 털을 깎습니다!\"" |
| |
| #: src/trait.md:44 src/trait/dyn.md:25 |
| msgid "// Implement the `Animal` trait for `Sheep`.\n" |
| msgstr "// `Sheep`에 대해 `Animal` 트레이트를 구현합니다.\n" |
| |
| #: src/trait.md:47 |
| msgid "// `Self` is the implementor type: `Sheep`.\n" |
| msgstr "// `Self`는 구현하는 타입인 `Sheep`입니다.\n" |
| |
| #: src/trait.md:58 |
| msgid "\"baaaaah?\"" |
| msgstr "\"메에에에?\"" |
| |
| #: src/trait.md:60 src/trait/dyn.md:29 |
| msgid "\"baaaaah!\"" |
| msgstr "\"메에에에!\"" |
| |
| #: src/trait.md:64 |
| msgid "// Default trait methods can be overridden.\n" |
| msgstr "// 기본 트레이트 메서드는 재정의(오버라이드)될 수 있습니다.\n" |
| |
| #: src/trait.md:66 |
| msgid "// For example, we can add some quiet contemplation.\n" |
| msgstr "// 예를 들어, 조용한 사색을 추가할 수 있습니다.\n" |
| |
| #: src/trait.md:67 |
| msgid "\"{} pauses briefly... {}\"" |
| msgstr "\"{}가 잠시 멈춥니다... {}\"" |
| |
| #: src/trait.md:72 |
| msgid "// Type annotation is necessary in this case.\n" |
| msgstr "// 이 경우에는 타입 어노테이션이 필요합니다.\n" |
| |
| #: src/trait.md:73 |
| msgid "\"Dolly\"" |
| msgstr "\"돌리\"" |
| |
| #: src/trait.md:74 |
| msgid "// TODO ^ Try removing the type annotations.\n" |
| msgstr "// TODO ^ 타입 어노테이션을 제거해 보세요.\n" |
| |
| #: src/trait/derive.md:3 |
| msgid "" |
| "The compiler is capable of providing basic implementations for some traits " |
| "via the `#[derive]` [attribute](../attribute.md). These traits can still be " |
| "manually implemented if a more complex behavior is required." |
| msgstr "" |
| "컴파일러는 `#[derive]` [속성](../attribute.md)을 통해 일부 트레이트에 대한 기" |
| "본적인 구현을 제공할 수 있습니다. 더 복잡한 동작이 필요한 경우에는 이러한 트" |
| "레이트들을 수동으로 구현할 수도 있습니다." |
| |
| #: src/trait/derive.md:7 |
| msgid "The following is a list of derivable traits:" |
| msgstr "다음은 derive 가능한 트레이트 목록입니다:" |
| |
| #: src/trait/derive.md:9 |
| msgid "" |
| "Comparison traits: [`Eq`](https://doc.rust-lang.org/std/cmp/trait.Eq.html), " |
| "[`PartialEq`](https://doc.rust-lang.org/std/cmp/trait.PartialEq.html), " |
| "[`Ord`](https://doc.rust-lang.org/std/cmp/trait.Ord.html), [`PartialOrd`]" |
| "(https://doc.rust-lang.org/std/cmp/trait.PartialOrd.html)." |
| msgstr "" |
| "비교 트레이트: [`Eq`](https://doc.rust-lang.org/std/cmp/trait.Eq.html), " |
| "[`PartialEq`](https://doc.rust-lang.org/std/cmp/trait.PartialEq.html), " |
| "[`Ord`](https://doc.rust-lang.org/std/cmp/trait.Ord.html), [`PartialOrd`]" |
| "(https://doc.rust-lang.org/std/cmp/trait.PartialOrd.html)." |
| |
| #: src/trait/derive.md:11 |
| msgid "" |
| "[`Clone`](https://doc.rust-lang.org/std/clone/trait.Clone.html), to create " |
| "`T` from `&T` via a copy." |
| msgstr "" |
| "[`Clone`](https://doc.rust-lang.org/std/clone/trait.Clone.html), 복사를 통해 " |
| "`&T`로부터 `T`를 생성합니다." |
| |
| #: src/trait/derive.md:12 |
| msgid "" |
| "[`Copy`](https://doc.rust-lang.org/core/marker/trait.Copy.html), to give a " |
| "type 'copy semantics' instead of 'move semantics'." |
| msgstr "" |
| "[`Copy`](https://doc.rust-lang.org/core/marker/trait.Copy.html), 타입에 '이" |
| "동 의미론(move semantics)' 대신 '복사 의미론(copy semantics)'을 부여합니다." |
| |
| #: src/trait/derive.md:13 |
| msgid "" |
| "[`Hash`](https://doc.rust-lang.org/std/hash/trait.Hash.html), to compute a " |
| "hash from `&T`." |
| msgstr "" |
| "[`Hash`](https://doc.rust-lang.org/std/hash/trait.Hash.html), `&T`로부터 해시" |
| "를 계산합니다." |
| |
| #: src/trait/derive.md:14 |
| msgid "" |
| "[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html), to " |
| "create an empty instance of a data type." |
| msgstr "" |
| "[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html), 데이" |
| "터 타입의 빈 인스턴스를 생성합니다." |
| |
| #: src/trait/derive.md:15 |
| msgid "" |
| "[`Debug`](https://doc.rust-lang.org/std/fmt/trait.Debug.html), to format a " |
| "value using the `{:?}` formatter." |
| msgstr "" |
| "[`Debug`](https://doc.rust-lang.org/std/fmt/trait.Debug.html), `{:?}` 포맷터" |
| "를 사용하여 값을 형식화합니다." |
| |
| #: src/trait/derive.md:18 |
| msgid "// `Centimeters`, a tuple struct that can be compared\n" |
| msgstr "// `Centimeters`, 비교 가능한 튜플 구조체\n" |
| |
| #: src/trait/derive.md:21 |
| msgid "// `Inches`, a tuple struct that can be printed\n" |
| msgstr "// `Inches`, 출력 가능한 튜플 구조체\n" |
| |
| #: src/trait/derive.md:33 |
| msgid "// `Seconds`, a tuple struct with no additional attributes\n" |
| msgstr "// `Seconds`, 추가 속성이 없는 튜플 구조체\n" |
| |
| #: src/trait/derive.md:40 |
| msgid "" |
| "// Error: `Seconds` can't be printed; it doesn't implement the `Debug` " |
| "trait\n" |
| " //println!(\"One second looks like: {:?}\", _one_second);\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러: `Seconds`는 출력될 수 없습니다. `Debug` 트레이트를 구현하지 않았기 " |
| "때문입니다.\n" |
| " //println!(\"One second looks like: {:?}\", _one_second);\n" |
| " // TODO ^ 이 줄의 주석을 해제해 보세요.\n" |
| |
| #: src/trait/derive.md:44 |
| msgid "" |
| "// Error: `Seconds` can't be compared; it doesn't implement the `PartialEq` " |
| "trait\n" |
| " //let _this_is_true = (_one_second == _one_second);\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러: `Seconds`는 비교될 수 없습니다. `PartialEq` 트레이트를 구현하지 않았" |
| "기 때문입니다.\n" |
| " //let _this_is_true = (_one_second == _one_second);\n" |
| " // TODO ^ 이 줄의 주석을 해제해 보세요.\n" |
| |
| #: src/trait/derive.md:50 |
| msgid "\"One foot equals {:?}\"" |
| msgstr "\"1피트는 {:?}와 같습니다.\"" |
| |
| #: src/trait/derive.md:56 |
| msgid "\"smaller\"" |
| msgstr "\"더 작습니다\"" |
| |
| #: src/trait/derive.md:58 |
| msgid "\"bigger\"" |
| msgstr "\"더 큽니다\"" |
| |
| #: src/trait/derive.md:61 |
| msgid "\"One foot is {} than one meter.\"" |
| msgstr "\"1피트는 1미터보다 {}.\"" |
| |
| #: src/trait/derive.md:67 |
| msgid "[`derive`](https://doc.rust-lang.org/reference/attributes.html#derive)" |
| msgstr "[`derive`](https://doc.rust-lang.org/reference/attributes.html#derive)" |
| |
| #: src/trait/dyn.md:3 |
| msgid "" |
| "The Rust compiler needs to know how much space every function's return type " |
| "requires. This means all your functions have to return a concrete type. " |
| "Unlike other languages, if you have a trait like `Animal`, you can't write a " |
| "function that returns `Animal`, because its different implementations will " |
| "need different amounts of memory." |
| msgstr "" |
| "Rust 컴파일러는 모든 함수의 반환 타입이 얼마나 많은 공간을 필요로 하는지 알아" |
| "야 합니다. 이는 여러분의 모든 함수가 구체적인 타입을 반환해야 함을 의미합니" |
| "다. 다른 언어와 달리, `Animal`과 같은 트레이트가 있을 때 `Animal`을 반환하는 " |
| "함수를 작성할 수 없는데, 그 이유는 서로 다른 구현체들이 서로 다른 양의 메모리" |
| "를 필요로 하기 때문입니다." |
| |
| #: src/trait/dyn.md:8 |
| msgid "" |
| "However, there's an easy workaround. Instead of returning a trait object " |
| "directly, our functions return a `Box` which _contains_ some `Animal`. A " |
| "`box` is just a reference to some memory in the heap. Because a reference " |
| "has a statically-known size, and the compiler can guarantee it points to a " |
| "heap-allocated `Animal`, we can return a trait from our function!" |
| msgstr "" |
| "하지만 쉬운 해결 방법이 있습니다. 트레이트 객체를 직접 반환하는 대신, 우리 함" |
| "수는 어떤 `Animal`을 *포함하는* `Box`를 반환합니다. `Box`는 단지 힙 메모리에 " |
| "대한 참조일 뿐입니다. 참조는 정적으로 알려진 크기를 가지며, 컴파일러는 그것" |
| "이 힙에 할당된 `Animal`을 가리키고 있음을 보장할 수 있으므로, 우리 함수에서 " |
| "트레이트를 반환할 수 있게 됩니다!" |
| |
| #: src/trait/dyn.md:13 |
| msgid "" |
| "Rust tries to be as explicit as possible whenever it allocates memory on the " |
| "heap. So if your function returns a pointer-to-trait-on-heap in this way, " |
| "you need to write the return type with the `dyn` keyword, e.g. `Box<dyn " |
| "Animal>`." |
| msgstr "" |
| "Rust는 힙에 메모리를 할당할 때마다 가능한 한 명시적이려고 노력합니다. 따라서 " |
| "여러분의 함수가 이런 방식으로 힙상의 트레이트에 대한 포인터를 반환한다면, 반" |
| "환 타입에 `dyn` 키워드를 사용해야 합니다. 예: `Box<dyn Animal>`." |
| |
| #: src/trait/dyn.md:22 |
| msgid "// Instance method signature\n" |
| msgstr "// 인스턴스 메서드 시그니처\n" |
| |
| #: src/trait/dyn.md:32 |
| msgid "// Implement the `Animal` trait for `Cow`.\n" |
| msgstr "// `Cow`에 대해 `Animal` 트레이트를 구현합니다.\n" |
| |
| #: src/trait/dyn.md:36 |
| msgid "\"moooooo!\"" |
| msgstr "\"음메~!\"" |
| |
| #: src/trait/dyn.md:39 |
| msgid "" |
| "// Returns some struct that implements Animal, but we don't know which one " |
| "at compile time.\n" |
| msgstr "" |
| "// `Animal`을 구현하는 어떤 구조체를 반환하지만, 컴파일 타임에는 그것이 무엇" |
| "인지 알 수 없습니다.\n" |
| |
| #: src/trait/dyn.md:52 |
| msgid "\"You've randomly chosen an animal, and it says {}\"" |
| msgstr "\"동물을 무작위로 선택했고, 그 동물은 {}라고 말합니다.\"" |
| |
| #: src/trait/ops.md:3 |
| msgid "" |
| "In Rust, many of the operators can be overloaded via traits. That is, some " |
| "operators can be used to accomplish different tasks based on their input " |
| "arguments. This is possible because operators are syntactic sugar for method " |
| "calls. For example, the `+` operator in `a + b` calls the `add` method (as " |
| "in `a.add(b)`). This `add` method is part of the `Add` trait. Hence, the `+` " |
| "operator can be used by any implementor of the `Add` trait." |
| msgstr "" |
| "Rust에서 많은 연산자들은 트레이트를 통해 오버로딩될 수 있습니다. 즉, 일부 연" |
| "산자들은 입력 인자에 따라 서로 다른 작업을 수행하는 데 사용될 수 있습니다. 이" |
| "는 연산자가 메서드 호출의 구문 설탕(syntactic sugar)이기 때문에 가능합니다. " |
| "예를 들어, `a + b`에서의 `+` 연산자는 (`a.add(b)`와 같이) `add` 메서드를 호출" |
| "합니다. 이 `add` 메서드는 `Add` 트레이트의 일부입니다. 따라서 `+` 연산자는 " |
| "`Add` 트레이트의 모든 구현체에서 사용될 수 있습니다." |
| |
| #: src/trait/ops.md:9 |
| msgid "" |
| "A list of the traits, such as `Add`, that overload operators can be found in " |
| "[`core::ops`](https://doc.rust-lang.org/core/ops/)." |
| msgstr "" |
| "연산자를 오버로딩하는 `Add`와 같은 트레이트들의 목록은 [`core::ops`](https://" |
| "doc.rust-lang.org/core/ops/)에서 찾을 수 있습니다." |
| |
| #: src/trait/ops.md:22 |
| msgid "" |
| "// The `std::ops::Add` trait is used to specify the functionality of `+`.\n" |
| "// Here, we make `Add<Bar>` - the trait for addition with a RHS of type " |
| "`Bar`.\n" |
| "// The following block implements the operation: Foo + Bar = FooBar\n" |
| msgstr "" |
| "// `std::ops::Add` 트레이트는 `+`의 기능을 지정하는 데 사용됩니다.\n" |
| "// 여기서 우리는 `Add<Bar>`를 만듭니다 - 이는 RHS(우항) 타입이 `Bar`인 덧셈" |
| "을 위한 트레이트입니다.\n" |
| "// 다음 블록은 Foo + Bar = FooBar 연산을 구현합니다.\n" |
| |
| #: src/trait/ops.md:30 |
| msgid "\"> Foo.add(Bar) was called\"" |
| msgstr "\"> Foo.add(Bar)가 호출되었습니다\"" |
| |
| #: src/trait/ops.md:35 |
| msgid "" |
| "// By reversing the types, we end up implementing non-commutative addition.\n" |
| "// Here, we make `Add<Foo>` - the trait for addition with a RHS of type " |
| "`Foo`.\n" |
| "// This block implements the operation: Bar + Foo = BarFoo\n" |
| msgstr "" |
| "// 타입을 반대로 함으로써, 우리는 비가환(non-commutative) 덧셈을 구현하게 됩" |
| "니다.\n" |
| "// 여기서 우리는 `Add<Foo>`를 만듭니다 - 이는 RHS 타입이 `Foo`인 덧셈을 위한 " |
| "트레이트입니다.\n" |
| "// 이 블록은 Bar + Foo = BarFoo 연산을 구현합니다.\n" |
| |
| #: src/trait/ops.md:43 |
| msgid "\"> Bar.add(Foo) was called\"" |
| msgstr "\"> Bar.add(Foo)가 호출되었습니다\"" |
| |
| #: src/trait/ops.md:50 |
| msgid "\"Foo + Bar = {:?}\"" |
| msgstr "\"Foo + Bar = {:?}\"" |
| |
| #: src/trait/ops.md:51 |
| msgid "\"Bar + Foo = {:?}\"" |
| msgstr "\"Bar + Foo = {:?}\"" |
| |
| #: src/trait/ops.md:55 src/testing.md:16 src/testing/doc_testing.md:105 |
| #: src/testing/dev_dependencies.md:36 |
| msgid "See Also" |
| msgstr "참고" |
| |
| #: src/trait/ops.md:57 |
| msgid "" |
| "[Add](https://doc.rust-lang.org/core/ops/trait.Add.html), [Syntax Index]" |
| "(https://doc.rust-lang.org/book/appendix-02-operators.html)" |
| msgstr "" |
| "[Add](https://doc.rust-lang.org/core/ops/trait.Add.html), [구문 색인]" |
| "(https://doc.rust-lang.org/book/appendix-02-operators.html)" |
| |
| #: src/trait/drop.md:3 |
| msgid "" |
| "The [`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html) trait only " |
| "has one method: `drop`, which is called automatically when an object goes " |
| "out of scope. The main use of the `Drop` trait is to free the resources that " |
| "the implementor instance owns." |
| msgstr "" |
| "[`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop.html) 트레이트는 `drop`" |
| "이라는 하나의 메서드만을 가집니다. 이 메서드는 객체가 스코프를 벗어날 때 자동" |
| "으로 호출됩니다. `Drop` 트레이트의 주요 용도는 구현체 인스턴스가 소유한 리소" |
| "스를 해제하는 것입니다." |
| |
| #: src/trait/drop.md:7 |
| msgid "" |
| "`Box`, `Vec`, `String`, `File`, and `Process` are some examples of types " |
| "that implement the `Drop` trait to free resources. The `Drop` trait can also " |
| "be manually implemented for any custom data type." |
| msgstr "" |
| "`Box`, `Vec`, `String`, `File`, 그리고 `Process`는 리소스를 해제하기 위해 " |
| "`Drop` 트레이트를 구현하는 몇 가지 타입의 예입니다. `Drop` 트레이트는 임의의 " |
| "사용자 정의 데이터 타입에 대해 수동으로 구현될 수도 있습니다." |
| |
| #: src/trait/drop.md:11 |
| msgid "" |
| "The following example adds a print to console to the `drop` function to " |
| "announce when it is called." |
| msgstr "" |
| "다음 예제는 `drop` 함수가 호출될 때 알림을 주기 위해 콘솔 출력을 추가합니다." |
| |
| #: src/trait/drop.md:18 |
| msgid "// This trivial implementation of `drop` adds a print to console.\n" |
| msgstr "// 이 간단한 `drop` 구현은 콘솔에 출력을 추가합니다.\n" |
| |
| #: src/trait/drop.md:22 |
| msgid "\"> Dropping {}\"" |
| msgstr "\"> {}를 해제합니다\"" |
| |
| #: src/trait/drop.md:27 src/std_misc/path.md:33 src/std_misc/fs.md:44 |
| #: src/std_misc/fs.md:87 |
| msgid "\"a\"" |
| msgstr "\"a\"" |
| |
| #: src/trait/drop.md:29 |
| msgid "// block A\n" |
| msgstr "// 블록 A\n" |
| |
| #: src/trait/drop.md:31 src/std_misc/path.md:33 |
| msgid "\"b\"" |
| msgstr "\"b\"" |
| |
| #: src/trait/drop.md:33 |
| msgid "// block B\n" |
| msgstr "// 블록 B\n" |
| |
| #: src/trait/drop.md:35 src/std_misc/path.md:36 |
| msgid "\"c\"" |
| msgstr "\"c\"" |
| |
| #: src/trait/drop.md:36 |
| msgid "\"d\"" |
| msgstr "\"d\"" |
| |
| #: src/trait/drop.md:38 |
| msgid "\"Exiting block B\"" |
| msgstr "\"블록 B를 나가는 중\"" |
| |
| #: src/trait/drop.md:40 |
| msgid "\"Just exited block B\"" |
| msgstr "\"방금 블록 B를 나갔습니다\"" |
| |
| #: src/trait/drop.md:42 |
| msgid "\"Exiting block A\"" |
| msgstr "\"블록 A를 나가는 중\"" |
| |
| #: src/trait/drop.md:44 |
| msgid "\"Just exited block A\"" |
| msgstr "\"방금 블록 A를 나갔습니다\"" |
| |
| #: src/trait/drop.md:46 |
| msgid "// Variable can be manually dropped using the `drop` function\n" |
| msgstr "// 변수는 `drop` 함수를 사용하여 수동으로 해제할 수 있습니다.\n" |
| |
| #: src/trait/drop.md:48 |
| msgid "// TODO ^ Try commenting this line\n" |
| msgstr "// TODO ^ 이 줄을 주석 처리해 보세요.\n" |
| |
| #: src/trait/drop.md:50 |
| msgid "\"end of the main function\"" |
| msgstr "\"메인 함수 끝\"" |
| |
| #: src/trait/drop.md:52 |
| msgid "" |
| "// `_a` *won't* be `drop`ed again here, because it already has been\n" |
| " // (manually) `drop`ed\n" |
| msgstr "" |
| "// `_a`는 여기서 다시 `drop`되지 않습니다. 이미 (수동으로) `drop`되었기 때문" |
| "입니다.\n" |
| |
| #: src/trait/drop.md:57 |
| msgid "" |
| "For a more practical example, here's how the `Drop` trait can be used to " |
| "automatically clean up temporary files when they're no longer needed:" |
| msgstr "" |
| "더 실용적인 예로, `Drop` 트레이트를 사용하여 더 이상 필요하지 않은 임시 파일" |
| "을 자동으로 정리하는 방법은 다음과 같습니다:" |
| |
| #: src/trait/drop.md:71 |
| msgid "// Note: File::create() will overwrite existing files\n" |
| msgstr "// 참고: `File::create()`는 기존 파일을 덮어씁니다.\n" |
| |
| #: src/trait/drop.md:77 |
| msgid "" |
| "// When TempFile is dropped:\n" |
| "// 1. First, our drop implementation will remove the file's name from the " |
| "filesystem.\n" |
| "// 2. Then, File's drop will close the file, removing its underlying content " |
| "from the disk.\n" |
| msgstr "" |
| "// `TempFile`이 drop될 때:\n" |
| "// 1. 먼저, 우리가 작성한 drop 구현이 파일 시스템에서 파일 이름을 제거합니" |
| "다.\n" |
| "// 2. 그런 다음, `File`의 drop이 파일을 닫고 디스크에서 기본 콘텐츠를 제거합" |
| "니다.\n" |
| |
| #: src/trait/drop.md:84 |
| msgid "\"Failed to remove temporary file: {}\"" |
| msgstr "\"임시 파일을 제거하는 데 실패했습니다: {}\"" |
| |
| #: src/trait/drop.md:86 |
| msgid "\"> Dropped temporary file: {:?}\"" |
| msgstr "\"> 임시 파일을 해제했습니다: {:?}\"" |
| |
| #: src/trait/drop.md:87 |
| msgid "" |
| "// File's drop is implicitly called here because it is a field of this " |
| "struct.\n" |
| msgstr "" |
| "// `File`의 drop은 이 구조체의 필드이므로 여기서 암시적으로 호출됩니다.\n" |
| |
| #: src/trait/drop.md:92 |
| msgid "// Create a new scope to demonstrate drop behavior\n" |
| msgstr "// drop 동작을 시연하기 위해 새 스코프를 생성합니다.\n" |
| |
| #: src/trait/drop.md:94 |
| msgid "\"test.txt\"" |
| msgstr "\"test.txt\"" |
| |
| #: src/trait/drop.md:95 |
| msgid "\"Temporary file created\"" |
| msgstr "\"임시 파일이 생성되었습니다\"" |
| |
| #: src/trait/drop.md:96 |
| msgid "// File will be automatically cleaned up when temp goes out of scope\n" |
| msgstr "// `temp`가 스코프를 벗어날 때 파일이 자동으로 정리됩니다.\n" |
| |
| #: src/trait/drop.md:98 |
| msgid "\"End of scope - file should be cleaned up\"" |
| msgstr "\"스코프 종료 - 파일이 정리되어야 합니다\"" |
| |
| #: src/trait/drop.md:100 |
| msgid "// We can also manually drop if needed\n" |
| msgstr "// 필요하다면 수동으로 drop할 수도 있습니다.\n" |
| |
| #: src/trait/drop.md:101 |
| msgid "\"another_test.txt\"" |
| msgstr "\"another_test.txt\"" |
| |
| #: src/trait/drop.md:102 |
| msgid "// Explicitly drop the file\n" |
| msgstr "// 파일을 명시적으로 drop합니다.\n" |
| |
| #: src/trait/drop.md:103 |
| msgid "\"Manually dropped file\"" |
| msgstr "\"수동으로 파일을 drop했습니다\"" |
| |
| #: src/trait/iter.md:3 |
| msgid "" |
| "The [`Iterator`](https://doc.rust-lang.org/core/iter/trait.Iterator.html) " |
| "trait is used to implement iterators over collections such as arrays." |
| msgstr "" |
| "[`Iterator`](https://doc.rust-lang.org/core/iter/trait.Iterator.html) 트레이" |
| "트는 배열과 같은 컬렉션에 대한 이터레이터를 구현하는 데 사용됩니다." |
| |
| #: src/trait/iter.md:6 |
| msgid "" |
| "The trait requires only a method to be defined for the `next` element, which " |
| "may be manually defined in an `impl` block or automatically defined (as in " |
| "arrays and ranges)." |
| msgstr "" |
| "이 트레이트는 `next` 요소에 대해 정의될 메서드 하나만을 필요로 하며, 이는 " |
| "`impl` 블록에서 수동으로 정의하거나 (배열 및 범위와 같이) 자동으로 정의될 수 " |
| "있습니다." |
| |
| #: src/trait/iter.md:10 |
| msgid "" |
| "As a point of convenience for common situations, the `for` construct turns " |
| "some collections into iterators using the [`.into_iter()`](https://doc.rust-" |
| "lang.org/std/iter/trait.IntoIterator.html) method." |
| msgstr "" |
| "일반적인 상황에서의 편의를 위해, `for` 구문은 [`.into_iter()`](https://" |
| "doc.rust-lang.org/std/iter/trait.IntoIterator.html) 메서드를 사용하여 일부 컬" |
| "렉션을 이터레이터로 변환합니다." |
| |
| #: src/trait/iter.md:18 |
| msgid "" |
| "// Implement `Iterator` for `Fibonacci`.\n" |
| "// The `Iterator` trait only requires a method to be defined for the `next` " |
| "element,\n" |
| "// and an `associated type` to declare the return type of the iterator.\n" |
| msgstr "" |
| "// `Fibonacci`에 대해 `Iterator`를 구현합니다.\n" |
| "// `Iterator` 트레이트는 `next` 요소에 대해 정의될 메서드 하나와,\n" |
| "// 이터레이터의 반환 타입을 선언하기 위한 `연관 타입(associated type)`만을 필" |
| "요로 합니다.\n" |
| |
| #: src/trait/iter.md:23 |
| msgid "// We can refer to this type using Self::Item\n" |
| msgstr "// `Self::Item`을 사용하여 이 타입을 참조할 수 있습니다.\n" |
| |
| #: src/trait/iter.md:26 |
| msgid "" |
| "// Here, we define the sequence using `.curr` and `.next`.\n" |
| " // The return type is `Option<T>`:\n" |
| " // * When the `Iterator` is finished, `None` is returned.\n" |
| " // * Otherwise, the next value is wrapped in `Some` and returned.\n" |
| " // We use Self::Item in the return type, so we can change\n" |
| " // the type without having to update the function signatures.\n" |
| msgstr "" |
| "// 여기서리는 `.curr`와 `.next`를 사용하여 수열을 정의합니다.\n" |
| " // 반환 타입은 `Option<T>`입니다:\n" |
| " // * 이터레이터가 끝나면 `None`이 반환됩니다.\n" |
| " // * 그렇지 않으면 다음 값이 `Some`으로 감싸져서 반환됩니다.\n" |
| " // 반환 타입에 `Self::Item`을 사용하므로, 함수 시그니처를 업데이트할 필" |
| "요 없이\n" |
| " // 타입을 변경할 수 있습니다.\n" |
| |
| #: src/trait/iter.md:38 |
| msgid "" |
| "// Since there's no endpoint to a Fibonacci sequence, the `Iterator`\n" |
| " // will never return `None`, and `Some` is always returned.\n" |
| msgstr "" |
| "// 피보나치 수열에는 끝이 없으므로, 이 `Iterator`는\n" |
| " // 결코 `None`을 반환하지 않으며 항상 `Some`이 반환됩니다.\n" |
| |
| #: src/trait/iter.md:43 |
| msgid "// Returns a Fibonacci sequence generator\n" |
| msgstr "// 피보나치 수열 생성기를 반환합니다.\n" |
| |
| #: src/trait/iter.md:50 |
| msgid "// `0..3` is an `Iterator` that generates: 0, 1, and 2.\n" |
| msgstr "// `0..3`은 0, 1, 2를 생성하는 `Iterator`입니다.\n" |
| |
| #: src/trait/iter.md:53 |
| msgid "\"Four consecutive `next` calls on 0..3\"" |
| msgstr "\"0..3에 대한 네 번의 연속적인 `next` 호출\"" |
| |
| #: src/trait/iter.md:54 src/trait/iter.md:55 src/trait/iter.md:56 |
| #: src/trait/iter.md:57 src/std_misc/fs.md:90 |
| msgid "\"> {:?}\"" |
| msgstr "\"> {:?}\"" |
| |
| #: src/trait/iter.md:59 |
| msgid "" |
| "// `for` works through an `Iterator` until it returns `None`.\n" |
| " // Each `Some` value is unwrapped and bound to a variable (here, `i`).\n" |
| msgstr "" |
| "// `for`는 `None`이 반환될 때까지 `Iterator`를 통해 작동합니다.\n" |
| " // 각 `Some` 값은 래핑이 해제되어 변수(여기서는 `i`)에 바인딩됩니다.\n" |
| |
| #: src/trait/iter.md:61 |
| msgid "\"Iterate through 0..3 using `for`\"" |
| msgstr "\"`for`를 사용하여 0..3을 순회합니다\"" |
| |
| #: src/trait/iter.md:63 src/trait/iter.md:69 src/trait/iter.md:75 |
| #: src/trait/iter.md:83 src/std/vec.md:50 src/std/str.md:22 |
| #: src/std_misc/fs.md:82 |
| msgid "\"> {}\"" |
| msgstr "\"> {}\"" |
| |
| #: src/trait/iter.md:66 |
| msgid "// The `take(n)` method reduces an `Iterator` to its first `n` terms.\n" |
| msgstr "// `take(n)` 메서드는 `Iterator`를 처음 `n`개의 항으로 줄입니다.\n" |
| |
| #: src/trait/iter.md:67 |
| msgid "\"The first four terms of the Fibonacci sequence are: \"" |
| msgstr "\"피보나치 수열의 처음 네 항은 다음과 같습니다: \"" |
| |
| #: src/trait/iter.md:72 |
| msgid "" |
| "// The `skip(n)` method shortens an `Iterator` by dropping its first `n` " |
| "terms.\n" |
| msgstr "" |
| "// `skip(n)` 메서드는 처음 `n`개의 항을 버리고 `Iterator`를 단축시킵니다.\n" |
| |
| #: src/trait/iter.md:73 |
| msgid "\"The next four terms of the Fibonacci sequence are: \"" |
| msgstr "\"피보나치 수열의 다음 네 항은 다음과 같습니다: \"" |
| |
| #: src/trait/iter.md:80 |
| msgid "// The `iter` method produces an `Iterator` over an array/slice.\n" |
| msgstr "// `iter` 메서드는 배열/슬라이스에 대한 `Iterator`를 생성합니다.\n" |
| |
| #: src/trait/iter.md:81 |
| msgid "\"Iterate the following array {:?}\"" |
| msgstr "\"다음 배열 {:?}을 순회합니다\"" |
| |
| #: src/trait/impl_trait.md:3 |
| msgid "`impl Trait` can be used in two locations:" |
| msgstr "`impl Trait`는 두 위치에서 사용될 수 있습니다:" |
| |
| #: src/trait/impl_trait.md:5 |
| msgid "as an argument type" |
| msgstr "인자 타입으로서" |
| |
| #: src/trait/impl_trait.md:6 |
| msgid "as a return type" |
| msgstr "반환 타입으로서" |
| |
| #: src/trait/impl_trait.md:8 |
| msgid "As an argument type" |
| msgstr "인자 타입으로서" |
| |
| #: src/trait/impl_trait.md:10 |
| msgid "" |
| "If your function is generic over a trait but you don't mind the specific " |
| "type, you can simplify the function declaration using `impl Trait` as the " |
| "type of the argument." |
| msgstr "" |
| "함수가 트레이트에 대해 제네릭이지만 구체적인 타입에는 관심이 없다면, 인자 타" |
| "입으로 `impl Trait`를 사용하여 함수 선언을 단순화할 수 있습니다." |
| |
| #: src/trait/impl_trait.md:12 |
| msgid "For example, consider the following code:" |
| msgstr "예를 들어, 다음 코드를 살펴보세요:" |
| |
| #: src/trait/impl_trait.md:18 src/trait/impl_trait.md:37 |
| msgid "// For each line in the source\n" |
| msgstr "// 소스의 각 줄에 대해\n" |
| |
| #: src/trait/impl_trait.md:20 src/trait/impl_trait.md:39 |
| msgid "" |
| "// If the line was read successfully, process it, if not, return the error\n" |
| msgstr "" |
| "// 줄을 성공적으로 읽었다면 처리하고, 그렇지 않으면 에러를 반환합니다\n" |
| |
| #: src/trait/impl_trait.md:21 src/trait/impl_trait.md:40 src/std/str.md:41 |
| msgid "','" |
| msgstr "','" |
| |
| #: src/trait/impl_trait.md:21 src/trait/impl_trait.md:40 |
| msgid "// Split the line separated by commas\n" |
| msgstr "// 콤마로 구분된 줄을 분할합니다\n" |
| |
| #: src/trait/impl_trait.md:22 src/trait/impl_trait.md:41 |
| msgid "// Remove leading and trailing whitespace\n" |
| msgstr "// 앞뒤 공백을 제거합니다\n" |
| |
| #: src/trait/impl_trait.md:23 src/trait/impl_trait.md:42 |
| msgid "// Collect all strings in a row into a Vec<String>\n" |
| msgstr "// 한 행의 모든 문자열을 `Vec<String>`으로 수집합니다\n" |
| |
| #: src/trait/impl_trait.md:26 src/trait/impl_trait.md:45 |
| msgid "// Collect all lines into a Vec<Vec<String>>\n" |
| msgstr "// 모든 줄을 `Vec<Vec<String>>`으로 수집합니다\n" |
| |
| #: src/trait/impl_trait.md:30 |
| msgid "" |
| "`parse_csv_document` is generic, allowing it to take any type which " |
| "implements BufRead, such as `BufReader<File>` or `[u8]`, but it's not " |
| "important what type `R` is, and `R` is only used to declare the type of " |
| "`src`, so the function can also be written as:" |
| msgstr "" |
| "`parse_csv_document`는 제네릭이어서 `BufReader<File>`이나 `[u8]`과 같이 " |
| "`BufRead`를 구현하는 모든 타입을 취할 수 있지만, `R`이 어떤 타입인지는 중요하" |
| "지 않고 `R`은 단지 `src`의 타입을 선언하는 데만 사용되므로, 다음과 같이 작성" |
| "할 수도 있습니다:" |
| |
| #: src/trait/impl_trait.md:49 |
| msgid "" |
| "Note that using `impl Trait` as an argument type means that you cannot " |
| "explicitly state what form of the function you use, i.e. " |
| "`parse_csv_document::<std::io::Empty>(std::io::empty())` will not work with " |
| "the second example." |
| msgstr "" |
| "`impl Trait`를 인자 타입으로 사용하는 것은 여러분이 함수의 어떤 형태를 사용하" |
| "는지 명시적으로 명시할 수 없음을 의미합니다. 즉, `parse_csv_document::" |
| "<std::io::Empty>(std::io::empty())`는 두 번째 예제에서 작동하지 않습니다." |
| |
| #: src/trait/impl_trait.md:51 |
| msgid "As a return type" |
| msgstr "반환 타입으로서" |
| |
| #: src/trait/impl_trait.md:53 |
| msgid "" |
| "If your function returns a type that implements `MyTrait`, you can write its " |
| "return type as `-> impl MyTrait`. This can help simplify your type " |
| "signatures quite a lot!" |
| msgstr "" |
| "여러분의 함수가 `MyTrait`를 구현하는 타입을 반환한다면, 반환 타입을 `-> impl " |
| "MyTrait`로 작성할 수 있습니다. 이는 타입 시그니처를 아주 많이 단순화하는 데 " |
| "도움이 될 수 있습니다!" |
| |
| #: src/trait/impl_trait.md:59 |
| msgid "" |
| "// This function combines two `Vec<i32>` and returns an iterator over it.\n" |
| "// Look how complicated its return type is!\n" |
| msgstr "" |
| "// 이 함수는 두 개의 `Vec<i32>`를 결합하고 그에 대한 이터레이터를 반환합니" |
| "다.\n" |
| "// 반환 타입이 얼마나 복잡한지 보세요!\n" |
| |
| #: src/trait/impl_trait.md:68 |
| msgid "" |
| "// This is the exact same function, but its return type uses `impl Trait`.\n" |
| "// Look how much simpler it is!\n" |
| msgstr "" |
| "// 이것은 정확히 동일한 함수이지만, 반환 타입에 `impl Trait`를 사용합니다.\n" |
| "// 훨씬 더 간단해진 것을 보세요!\n" |
| |
| #: src/trait/impl_trait.md:87 |
| msgid "\"all done\"" |
| msgstr "\"모두 완료\"" |
| |
| #: src/trait/impl_trait.md:91 |
| msgid "" |
| "More importantly, some Rust types can't be written out. For example, every " |
| "closure has its own unnamed concrete type. Before `impl Trait` syntax, you " |
| "had to allocate on the heap in order to return a closure. But now you can do " |
| "it all statically, like this:" |
| msgstr "" |
| "더 중요한 점은, 일부 Rust 타입은 명시적으로 작성할 수 없다는 것입니다. 예를 " |
| "들어, 모든 클로저는 자신만의 이름 없는 구체적인 타입을 가집니다. `impl " |
| "Trait` 구문이 생기기 전에는 클로저를 반환하기 위해 힙에 할당해야만 했습니다. " |
| "하지만 이제는 다음과 같이 정적으로 처리할 수 있습니다:" |
| |
| #: src/trait/impl_trait.md:97 |
| msgid "// Returns a function that adds `y` to its input\n" |
| msgstr "// 입력에 `y`를 더하는 함수를 반환합니다.\n" |
| |
| #: src/trait/impl_trait.md:109 |
| msgid "" |
| "You can also use `impl Trait` to return an iterator that uses `map` or " |
| "`filter` closures! This makes using `map` and `filter` easier. Because " |
| "closure types don't have names, you can't write out an explicit return type " |
| "if your function returns iterators with closures. But with `impl Trait` you " |
| "can do this easily:" |
| msgstr "" |
| "또한 `impl Trait`를 사용하여 `map`이나 `filter` 클로저를 사용하는 이터레이터" |
| "를 반환할 수도 있습니다! 이는 `map`과 `filter`를 더 쉽게 사용할 수 있게 해줍" |
| "니다. 클로저 타입은 이름이 없기 때문에, 함수가 클로저를 포함하는 이터레이터" |
| "를 반환할 경우 명시적인 반환 타입을 작성할 수 없습니다. 하지만 `impl Trait`" |
| "를 사용하면 이를 쉽게 할 수 있습니다:" |
| |
| #: src/trait/clone.md:3 |
| msgid "" |
| "When dealing with resources, the default behavior is to transfer them during " |
| "assignments or function calls. However, sometimes we need to make a copy of " |
| "the resource as well." |
| msgstr "" |
| "리소스를 다룰 때, 기본 동작은 할당이나 함수 호출 시 리소스를 이전(transfer)하" |
| "는 것입니다. 하지만 때로는 리소스의 복사본을 만들어야 할 때도 있습니다." |
| |
| #: src/trait/clone.md:7 |
| msgid "" |
| "The [`Clone`](https://doc.rust-lang.org/std/clone/trait.Clone.html) trait " |
| "helps us do exactly this. Most commonly, we can use the `.clone()` method " |
| "defined by the `Clone` trait." |
| msgstr "" |
| "[`Clone`](https://doc.rust-lang.org/std/clone/trait.Clone.html) 트레이트는 바" |
| "로 이런 일을 돕습니다. 가장 일반적으로, `Clone` 트레이트에 정의된 `.clone()` " |
| "메서드를 사용할 수 있습니다." |
| |
| #: src/trait/clone.md:11 |
| msgid "// A unit struct without resources\n" |
| msgstr "// 리소스가 없는 유닛 구조체\n" |
| |
| #: src/trait/clone.md:14 |
| msgid "// A tuple struct with resources that implements the `Clone` trait\n" |
| msgstr "// `Clone` 트레이트를 구현하는 리소스가 있는 튜플 구조체\n" |
| |
| #: src/trait/clone.md:20 |
| msgid "// Instantiate `Unit`\n" |
| msgstr "// `Unit`을 인스턴스화합니다\n" |
| |
| #: src/trait/clone.md:22 |
| msgid "// Copy `Unit`, there are no resources to move\n" |
| msgstr "// `Unit`을 복사합니다. 이동할 리소스가 없습니다.\n" |
| |
| #: src/trait/clone.md:25 |
| msgid "// Both `Unit`s can be used independently\n" |
| msgstr "// 두 `Unit` 모두 독립적으로 사용될 수 있습니다.\n" |
| |
| #: src/trait/clone.md:26 src/trait/clone.md:31 |
| msgid "\"original: {:?}\"" |
| msgstr "\"원본: {:?}\"" |
| |
| #: src/trait/clone.md:27 |
| msgid "\"copy: {:?}\"" |
| msgstr "\"복사본: {:?}\"" |
| |
| #: src/trait/clone.md:29 |
| msgid "// Instantiate `Pair`\n" |
| msgstr "// `Pair`를 인스턴스화합니다\n" |
| |
| #: src/trait/clone.md:33 |
| msgid "// Move `pair` into `moved_pair`, moves resources\n" |
| msgstr "// `pair`를 `moved_pair`로 이동합니다. 리소스가 이동됩니다.\n" |
| |
| #: src/trait/clone.md:35 |
| msgid "\"moved: {:?}\"" |
| msgstr "\"이동됨: {:?}\"" |
| |
| #: src/trait/clone.md:37 |
| msgid "" |
| "// Error! `pair` has lost its resources\n" |
| " //println!(\"original: {:?}\", pair);\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! `pair`는 리소스를 잃었습니다\n" |
| " //println!(\"original: {:?}\", pair);\n" |
| " // TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/trait/clone.md:41 |
| msgid "// Clone `moved_pair` into `cloned_pair` (resources are included)\n" |
| msgstr "// `moved_pair`를 `cloned_pair`로 클론합니다(리소스가 포함됩니다)\n" |
| |
| #: src/trait/clone.md:43 |
| msgid "// Drop the moved original pair using std::mem::drop\n" |
| msgstr "// `std::mem::drop`을 사용하여 이동된 원본 페어를 해제합니다\n" |
| |
| #: src/trait/clone.md:46 |
| msgid "" |
| "// Error! `moved_pair` has been dropped\n" |
| " //println!(\"moved and dropped: {:?}\", moved_pair);\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! `moved_pair`가 해제되었습니다\n" |
| " //println!(\"moved and dropped: {:?}\", moved_pair);\n" |
| " // TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/trait/clone.md:50 |
| msgid "// The result from .clone() can still be used!\n" |
| msgstr "// `.clone()`의 결과는 여전히 사용될 수 있습니다!\n" |
| |
| #: src/trait/clone.md:51 |
| msgid "\"clone: {:?}\"" |
| msgstr "\"클론: {:?}\"" |
| |
| #: src/trait/supertraits.md:3 |
| msgid "" |
| "Rust doesn't have \"inheritance\", but you can define a trait as being a " |
| "superset of another trait. For example:" |
| msgstr "" |
| "Rust에는 \"상속\"이 없지만, 한 트레이트를 다른 트레이트의 슈퍼셋(superset)으" |
| "로 정의할 수 있습니다. 예를 들어:" |
| |
| #: src/trait/supertraits.md:10 |
| msgid "" |
| "// Person is a supertrait of Student.\n" |
| "// Implementing Student requires you to also impl Person.\n" |
| msgstr "" |
| "// Person은 Student의 슈퍼트레이트입니다.\n" |
| "// Student를 구현하려면 Person도 구현해야 합니다.\n" |
| |
| #: src/trait/supertraits.md:20 |
| msgid "" |
| "// CompSciStudent (computer science student) is a subtrait of both " |
| "Programmer\n" |
| "// and Student. Implementing CompSciStudent requires you to impl both " |
| "supertraits.\n" |
| msgstr "" |
| "// CompSciStudent(컴퓨터 공학 학생)는 Programmer와 Student 모두의 서브트레이" |
| "트입니다.\n" |
| "// CompSciStudent를 구현하려면 두 슈퍼트레이트를 모두 구현해야 합니다.\n" |
| |
| #: src/trait/supertraits.md:29 |
| msgid "" |
| "\"My name is {} and I attend {}. My favorite language is {}. My Git username " |
| "is {}\"" |
| msgstr "" |
| "\"제 이름은 {}이고 {}에 다닙니다. 제가 가장 좋아하는 언어는 {}입니다. 제 Git " |
| "사용자 이름은 {}입니다.\"" |
| |
| #: src/trait/supertraits.md:42 |
| msgid "" |
| "[The Rust Programming Language chapter on supertraits](https://doc.rust-" |
| "lang.org/book/ch19-03-advanced-traits.html#using-supertraits-to-require-one-" |
| "traits-functionality-within-another-trait)" |
| msgstr "" |
| "[러스트 프로그래밍 언어의 슈퍼트레이트 장](https://doc.rust-lang.org/book/" |
| "ch19-03-advanced-traits.html#using-supertraits-to-require-one-traits-" |
| "functionality-within-another-trait)" |
| |
| #: src/trait/disambiguating.md:3 |
| msgid "" |
| "A type can implement many different traits. What if two traits both require " |
| "the same name for a function? For example, many traits might have a method " |
| "named `get()`. They might even have different return types!" |
| msgstr "" |
| "하나의 타입은 여러 개의 서로 다른 트레이트를 구현할 수 있습니다. 만약 두 트레" |
| "이트가 함수에 대해 동일한 이름을 요구한다면 어떨까요? 예를 들어, 많은 트레이" |
| "트가 `get()`이라는 이름의 메서드를 가질 수 있습니다. 심지어 반환 타입이 다를 " |
| "수도 있습니다!" |
| |
| #: src/trait/disambiguating.md:7 |
| msgid "" |
| "Good news: because each trait implementation gets its own `impl` block, it's " |
| "clear which trait's `get` method you're implementing." |
| msgstr "" |
| "좋은 소식은, 각 트레이트 구현이 자신만의 `impl` 블록을 가지기 때문에, 어떤 트" |
| "레이트의 `get` 메서드를 구현하고 있는지 명확하다는 것입니다." |
| |
| #: src/trait/disambiguating.md:10 |
| msgid "" |
| "What about when it comes time to _call_ those methods? To disambiguate " |
| "between them, we have to use Fully Qualified Syntax." |
| msgstr "" |
| "그럼 그 메서드들을 *호출*해야 할 때는 어떨까요? 이들 사이의 모호함을 없애기 " |
| "위해, 우리는 '완전한 정규화 구문(Fully Qualified Syntax)'을 사용해야 합니다." |
| |
| #: src/trait/disambiguating.md:15 |
| msgid "// Get the selected username out of this widget\n" |
| msgstr "// 이 위젯에서 선택된 사용자 이름을 가져옵니다\n" |
| |
| #: src/trait/disambiguating.md:20 |
| msgid "// Get the selected age out of this widget\n" |
| msgstr "// 이 위젯에서 선택된 나이를 가져옵니다\n" |
| |
| #: src/trait/disambiguating.md:23 |
| msgid "// A form with both a UsernameWidget and an AgeWidget\n" |
| msgstr "// UsernameWidget과 AgeWidget을 모두 포함하는 폼\n" |
| |
| #: src/trait/disambiguating.md:44 src/trait/disambiguating.md:54 |
| msgid "\"rustacean\"" |
| msgstr "\"러스타시안(rustacean)\"" |
| |
| #: src/trait/disambiguating.md:48 |
| msgid "" |
| "// If you uncomment this line, you'll get an error saying\n" |
| " // \"multiple `get` found\". Because, after all, there are multiple " |
| "methods\n" |
| " // named `get`.\n" |
| " // println!(\"{}\", form.get());\n" |
| msgstr "" |
| "// 이 줄의 주석을 해제하면 \"multiple `get` found\"라는 에러가 발생합니다.\n" |
| " // 결국 `get`이라는 이름의 메서드가 여러 개 있기 때문입니다.\n" |
| " // println!(\"{}\", form.get());\n" |
| |
| #: src/trait/disambiguating.md:62 |
| msgid "" |
| "[The Rust Programming Language chapter on Fully Qualified syntax](https://" |
| "doc.rust-lang.org/book/ch19-03-advanced-traits.html#fully-qualified-syntax-" |
| "for-disambiguation-calling-methods-with-the-same-name)" |
| msgstr "" |
| "[러스트 프로그래밍 언어의 완전한 정규화 구문 장](https://doc.rust-lang.org/" |
| "book/ch19-03-advanced-traits.html#fully-qualified-syntax-for-disambiguation-" |
| "calling-methods-with-the-same-name)" |
| |
| #: src/macros.md:1 |
| msgid "`macro_rules!`" |
| msgstr "`macro_rules!`" |
| |
| #: src/macros.md:3 |
| msgid "" |
| "Rust provides a powerful macro system that allows metaprogramming. As you've " |
| "seen in previous chapters, macros look like functions, except that their " |
| "name ends with a bang `!`, but instead of generating a function call, macros " |
| "are expanded into source code that gets compiled with the rest of the " |
| "program. However, unlike macros in C and other languages, Rust macros are " |
| "expanded into abstract syntax trees, rather than string preprocessing, so " |
| "you don't get unexpected precedence bugs." |
| msgstr "" |
| "Rust는 메타프로그래밍을 가능하게 하는 강력한 매크로 시스템을 제공합니다. 이" |
| "전 장들에서 보았듯이, 매크로는 이름이 느낌표 `!`로 끝난다는 점을 제외하면 함" |
| "수와 비슷해 보입니다. 하지만 함수 호출을 생성하는 대신, 매크로는 프로그램의 " |
| "나머지 부분과 함께 컴파일되는 소스 코드로 확장됩니다. 그러나 C나 다른 언어의 " |
| "매크로와 달리, Rust 매크로는 문자열 전처리가 아닌 추상 구문 트리(AST)로 확장" |
| "되므로, 예상치 못한 연산자 우선순위 버그가 발생하지 않습니다." |
| |
| #: src/macros.md:11 |
| msgid "Macros are created using the `macro_rules!` macro." |
| msgstr "매크로는 `macro_rules!` 매크로를 사용하여 생성됩니다." |
| |
| #: src/macros.md:14 |
| msgid "// This is a simple macro named `say_hello`.\n" |
| msgstr "// `say_hello`라는 이름의 간단한 매크로입니다.\n" |
| |
| #: src/macros.md:16 |
| msgid "// `()` indicates that the macro takes no argument.\n" |
| msgstr "// `()`는 매크로가 인자를 취하지 않음을 나타냅니다.\n" |
| |
| #: src/macros.md:18 |
| msgid "// The macro will expand into the contents of this block.\n" |
| msgstr "// 매크로는 이 블록의 내용으로 확장됩니다.\n" |
| |
| #: src/macros.md:19 |
| msgid "\"Hello!\"" |
| msgstr "\"안녕하세요!\"" |
| |
| #: src/macros.md:24 |
| msgid "// This call will expand into `println!(\"Hello!\")`\n" |
| msgstr "// 이 호출은 `println!(\"안녕하세요!\")`로 확장됩니다.\n" |
| |
| #: src/macros.md:29 |
| msgid "So why are macros useful?" |
| msgstr "그렇다면 왜 매크로가 유용할까요?" |
| |
| #: src/macros.md:31 |
| msgid "" |
| "Don't repeat yourself. There are many cases where you may need similar " |
| "functionality in multiple places but with different types. Often, writing a " |
| "macro is a useful way to avoid repeating code. (More on this later)" |
| msgstr "" |
| "반복하지 마세요(DRY, Don't repeat yourself). 여러 곳에서 서로 다른 타입에 대" |
| "해 유사한 기능이 필요할 수 있는 경우가 많습니다. 종종 매크로를 작성하는 것은 " |
| "코드 반복을 피하는 유용한 방법입니다. (이에 대해서는 나중에 자세히 다룹니다)" |
| |
| #: src/macros.md:35 |
| msgid "" |
| "Domain-specific languages. Macros allow you to define special syntax for a " |
| "specific purpose. (More on this later)" |
| msgstr "" |
| "도메인 특화 언어(DSL, Domain-specific languages). 매크로를 사용하면 특정 목적" |
| "을 위한 특정 구문을 정의할 수 있습니다. (이에 대해서는 나중에 자세히 다룹니" |
| "다)" |
| |
| #: src/macros.md:38 |
| msgid "" |
| "Variadic interfaces. Sometimes you want to define an interface that takes a " |
| "variable number of arguments. An example is `println!` which could take any " |
| "number of arguments, depending on the format string. (More on this later)" |
| msgstr "" |
| "가변 인자 인터페이스. 때로는 가변적인 개수의 인자를 취하는 인터페이스를 정의" |
| "하고 싶을 때가 있습니다. 예를 들어 `println!`은 형식 문자열에 따라 인자를 몇 " |
| "개든 취할 수 있습니다! (이에 대해서는 나중에 자세히 다룹니다)" |
| |
| #: src/macros/syntax.md:3 |
| msgid "" |
| "In following subsections, we will show how to define macros in Rust. There " |
| "are three basic ideas:" |
| msgstr "" |
| "이어지는 하위 섹션에서는 Rust에서 매크로를 정의하는 방법을 보여줄 것입니다. " |
| "여기에는 세 가지 기본 아이디어가 있습니다:" |
| |
| #: src/macros/syntax.md:6 |
| msgid "[Patterns and Designators](designators.md)" |
| msgstr "[패턴과 지시자](designators.md)" |
| |
| #: src/macros/syntax.md:7 |
| msgid "[Overloading](overload.md)" |
| msgstr "[오버로딩](overload.md)" |
| |
| #: src/macros/syntax.md:8 |
| msgid "[Repetition](repeat.md)" |
| msgstr "[반복](repeat.md)" |
| |
| #: src/macros/designators.md:3 |
| msgid "" |
| "The arguments of a macro are prefixed by a dollar sign `$` and type " |
| "annotated with a _designator_:" |
| msgstr "" |
| "매크로의 인자는 달러 기호 `$`가 접두사로 붙으며, 지시자(designator)로 타입이 " |
| "어노테이션됩니다:" |
| |
| #: src/macros/designators.md:8 |
| msgid "" |
| "// This macro takes an argument of designator `ident` and\n" |
| " // creates a function named `$func_name`.\n" |
| " // The `ident` designator is used for variable/function names.\n" |
| msgstr "" |
| "// 이 매크로는 지시자 `ident` 인자를 취하여\n" |
| " // `$func_name`이라는 이름의 함수를 생성합니다.\n" |
| " // `ident` 지시자는 변수/함수 이름에 사용됩니다.\n" |
| |
| #: src/macros/designators.md:13 |
| msgid "// The `stringify!` macro converts an `ident` into a string.\n" |
| msgstr "// `stringify!` 매크로는 `ident`를 문자열로 변환합니다.\n" |
| |
| #: src/macros/designators.md:14 |
| msgid "\"You called {:?}()\"" |
| msgstr "\"당신은 {:?}()를 호출했습니다\"" |
| |
| #: src/macros/designators.md:19 |
| msgid "// Create functions named `foo` and `bar` with the above macro.\n" |
| msgstr "" |
| "// 위의 매크로를 사용하여 `foo`와 `bar`라는 이름의 함수를 생성합니다.\n" |
| |
| #: src/macros/designators.md:25 |
| msgid "" |
| "// This macro takes an expression of type `expr` and prints\n" |
| " // it as a string along with its result.\n" |
| " // The `expr` designator is used for expressions.\n" |
| msgstr "" |
| "// 이 매크로는 `expr` 타입의 표현식을 취하여\n" |
| " // 결과와 함께 문자열로 출력합니다.\n" |
| " // `expr` 지시자는 표현식에 사용됩니다.\n" |
| |
| #: src/macros/designators.md:29 |
| msgid "// `stringify!` will convert the expression *as it is* into a string.\n" |
| msgstr "// `stringify!`는 표현식을 *있는 그대로* 문자열로 변환합니다.\n" |
| |
| #: src/macros/designators.md:30 |
| msgid "\"{:?} = {:?}\"" |
| msgstr "\"{:?} = {:?}\"" |
| |
| #: src/macros/designators.md:42 |
| msgid "// Recall that blocks are expressions too!\n" |
| msgstr "// 블록도 표현식이라는 점을 기억하세요!\n" |
| |
| #: src/macros/designators.md:51 |
| msgid "These are some of the available designators:" |
| msgstr "사용 가능한 지시자들의 일부는 다음과 같습니다:" |
| |
| #: src/macros/designators.md:53 |
| msgid "`block`" |
| msgstr "`block`" |
| |
| #: src/macros/designators.md:54 |
| msgid "`expr` is used for expressions" |
| msgstr "`expr`은 표현식에 사용됩니다" |
| |
| #: src/macros/designators.md:55 |
| msgid "`ident` is used for variable/function names" |
| msgstr "`ident`는 변수/함수 이름에 사용됩니다" |
| |
| #: src/macros/designators.md:56 |
| msgid "`item`" |
| msgstr "`item`" |
| |
| #: src/macros/designators.md:57 |
| msgid "`literal` is used for literal constants" |
| msgstr "`literal`은 리터럴 상수에 사용됩니다" |
| |
| #: src/macros/designators.md:58 |
| msgid "`pat` (_pattern_)" |
| msgstr "`pat` (패턴)" |
| |
| #: src/macros/designators.md:59 |
| msgid "`path`" |
| msgstr "`path`" |
| |
| #: src/macros/designators.md:60 |
| msgid "`stmt` (_statement_)" |
| msgstr "`stmt` (문장)" |
| |
| #: src/macros/designators.md:61 |
| msgid "`tt` (_token tree_)" |
| msgstr "`tt` (토큰 트리)" |
| |
| #: src/macros/designators.md:62 |
| msgid "`ty` (_type_)" |
| msgstr "`ty` (타입)" |
| |
| #: src/macros/designators.md:63 |
| msgid "`vis` (_visibility qualifier_)" |
| msgstr "`vis` (가시성 한정자)" |
| |
| #: src/macros/designators.md:65 |
| msgid "" |
| "For a complete list, see the [Rust Reference](https://doc.rust-lang.org/" |
| "reference/macros-by-example.html)." |
| msgstr "" |
| "전체 목록은 [Rust 레퍼런스](https://doc.rust-lang.org/reference/macros-by-" |
| "example.html)를 참조하세요." |
| |
| #: src/macros/overload.md:3 |
| msgid "" |
| "Macros can be overloaded to accept different combinations of arguments. In " |
| "that regard, `macro_rules!` can work similarly to a match block:" |
| msgstr "" |
| "매크로는 서로 다른 인자 조합을 수용하도록 오버로딩될 수 있습니다. 그런 점에서" |
| "는 `macro_rules!`는 `match` 블록과 비슷하게 작동할 수 있습니다:" |
| |
| #: src/macros/overload.md:7 |
| msgid "" |
| "// `test!` will compare `$left` and `$right`\n" |
| "// in different ways depending on how you invoke it:\n" |
| msgstr "" |
| "// `test!`는 호출 방식에 따라 `$left`와 `$right`를\n" |
| "// 서로 다른 방식으로 비교할 것입니다:\n" |
| |
| #: src/macros/overload.md:10 |
| msgid "" |
| "// Arguments don't need to be separated by a comma.\n" |
| " // Any template can be used!\n" |
| msgstr "" |
| "// 인자들은 콤마로 구분될 필요가 없습니다.\n" |
| " // 어떤 템플릿이든 사용될 수 있습니다!\n" |
| |
| #: src/macros/overload.md:13 |
| msgid "\"{:?} and {:?} is {:?}\"" |
| msgstr "\"{:?} and {:?} is {:?}\"" |
| |
| #: src/macros/overload.md:18 |
| msgid "// ^ each arm must end with a semicolon.\n" |
| msgstr "// ^ 각 팔(arm)은 세미콜론으로 끝나야 합니다.\n" |
| |
| #: src/macros/overload.md:20 |
| msgid "\"{:?} or {:?} is {:?}\"" |
| msgstr "\"{:?} or {:?} is {:?}\"" |
| |
| #: src/macros/repeat.md:3 |
| msgid "" |
| "Macros can use `+` in the argument list to indicate that an argument may " |
| "repeat at least once, or `*`, to indicate that the argument may repeat zero " |
| "or more times." |
| msgstr "" |
| "매크로는 인자 목록에서 `+`를 사용하여 인자가 한 번 이상 반복될 수 있음을 나타" |
| "내거나, `*`를 사용하여 인자가 0번 이상 반복될 수 있음을 나타낼 수 있습니다." |
| |
| #: src/macros/repeat.md:7 |
| msgid "" |
| "In the following example, surrounding the matcher with `$(...),+` will match " |
| "one or more expression, separated by commas. Also note that the semicolon is " |
| "optional on the last case." |
| msgstr "" |
| "다음 예제에서, 매처(matcher)를 `$(...),+`로 감싸면 콤마로 구분된 하나 이상의 " |
| "표현식과 매치됩니다. 또한 마지막 케이스에서는 세미콜론이 선택사항임에 유의하" |
| "세요." |
| |
| #: src/macros/repeat.md:12 |
| msgid "// `find_min!` will calculate the minimum of any number of arguments.\n" |
| msgstr "// `find_min!`은 임의 개수의 인자들 중 최솟값을 계산합니다.\n" |
| |
| #: src/macros/repeat.md:14 |
| msgid "// Base case:\n" |
| msgstr "// 기본 케이스:\n" |
| |
| #: src/macros/repeat.md:16 |
| msgid "// `$x` followed by at least one `$y,`\n" |
| msgstr "// `$x` 뒤에 최소 하나의 `$y,`가 오는 경우\n" |
| |
| #: src/macros/repeat.md:18 |
| msgid "// Call `find_min!` on the tail `$y`\n" |
| msgstr "// 나머지 `$y`들에 대해 `find_min!`을 호출합니다.\n" |
| |
| #: src/macros/dry.md:3 |
| msgid "" |
| "Macros allow writing DRY code by factoring out the common parts of functions " |
| "and/or test suites. Here is an example that implements and tests the `+=`, " |
| "`*=` and `-=` operators on `Vec<T>`:" |
| msgstr "" |
| "매크로는 함수나 테스트 스위트의 공통 부분을 추출함으로써 DRY(Don't Repeat " |
| "Yourself) 코드를 작성할 수 있게 해줍니다. 다음은 `Vec<T>`에 대해 `+=`, `*=` " |
| "및 `-=` 연산자를 구현하고 테스트하는 예제입니다:" |
| |
| #: src/macros/dry.md:11 |
| msgid "" |
| "// The `tt` (token tree) designator is used for\n" |
| " // operators and tokens.\n" |
| msgstr "" |
| "// `tt`(토큰 트리) 지시자는\n" |
| " // 연산자와 토큰에 사용됩니다.\n" |
| |
| #: src/macros/dry.md:15 |
| msgid "\"{:?}: dimension mismatch: {:?} {:?} {:?}\"" |
| msgstr "\"{:?}: dimension mismatch: {:?} {:?} {:?}\"" |
| |
| #: src/macros/dry.md:30 |
| msgid "// *x = x.$method(*y);\n" |
| msgstr "// *x = x.$method(*y);\n" |
| |
| #: src/macros/dry.md:35 |
| msgid "// Implement `add_assign`, `mul_assign`, and `sub_assign` functions.\n" |
| msgstr "// `add_assign`, `mul_assign`, `sub_assign` 함수를 구현합니다.\n" |
| |
| #: src/macros/dry.md:60 |
| msgid "// Test `add_assign`, `mul_assign`, and `sub_assign`.\n" |
| msgstr "// `add_assign`, `mul_assign`, `sub_assign`을 테스트합니다.\n" |
| |
| #: src/macros/dsl.md:1 |
| msgid "Domain Specific Languages (DSLs)" |
| msgstr "도메인 특화 언어 (DSL)" |
| |
| #: src/macros/dsl.md:3 |
| msgid "" |
| "A DSL is a mini \"language\" embedded in a Rust macro. It is completely " |
| "valid Rust because the macro system expands into normal Rust constructs, but " |
| "it looks like a small language. This allows you to define concise or " |
| "intuitive syntax for some special functionality (within bounds)." |
| msgstr "" |
| "DSL은 Rust 매크로에 내장된 미니 \"언어\"입니다. 매크로 시스템이 일반적인 " |
| "Rust 구문으로 확장되기 때문에 완전히 유효한 Rust 코드이지만, 작은 언어처럼 보" |
| "입니다. 이를 통해 (일정한 범위 내에서) 특정 기능을 위한 간결하거나 직관적인 " |
| "구문을 정의할 수 있습니다." |
| |
| #: src/macros/dsl.md:8 |
| msgid "" |
| "Suppose that I want to define a little calculator API. I would like to " |
| "supply an expression and have the output printed to console." |
| msgstr "" |
| "작은 계산기 API를 정의하고 싶다고 가정해 봅시다. 표현식을 입력하면 출력이 콘" |
| "솔에 인쇄되도록 하고 싶습니다." |
| |
| #: src/macros/dsl.md:15 |
| msgid "// Force types to be unsigned integers\n" |
| msgstr "// 타입을 부호 없는 정수로 강제합니다\n" |
| |
| #: src/macros/dsl.md:16 src/macros/variadics.md:15 |
| msgid "\"{} = {}\"" |
| msgstr "\"{} = {}\"" |
| |
| #: src/macros/dsl.md:23 |
| msgid "// hehehe `eval` is _not_ a Rust keyword!\n" |
| msgstr "// 히히히 `eval`은 Rust 키워드가 아닙니다!\n" |
| |
| #: src/macros/dsl.md:32 src/macros/variadics.md:35 |
| msgid "Output:" |
| msgstr "출력:" |
| |
| #: src/macros/dsl.md:39 |
| msgid "" |
| "This was a very simple example, but much more complex interfaces have been " |
| "developed, such as [`lazy_static`](https://crates.io/crates/lazy_static) or " |
| "[`clap`](https://crates.io/crates/clap)." |
| msgstr "" |
| "이것은 매우 간단한 예제였지만, [`lazy_static`](https://crates.io/crates/" |
| "lazy_static)이나 [`clap`](https://crates.io/crates/clap)과 같이 훨씬 더 복잡" |
| "한 인터페이스들이 개발되어 있습니다." |
| |
| #: src/macros/dsl.md:43 |
| msgid "" |
| "Also, note the two pairs of braces in the macro. The outer ones are part of " |
| "the syntax of `macro_rules!`, in addition to `()` or `[]`." |
| msgstr "" |
| "또한, 매크로에 두 쌍의 중괄호가 있음에 유의하세요. 바깥쪽 중괄호는 `()`나 " |
| "`[]` 외에 `macro_rules!` 문법의 일부입니다." |
| |
| #: src/macros/variadics.md:1 |
| msgid "Variadic Interfaces" |
| msgstr "가변 인자 인터페이스" |
| |
| #: src/macros/variadics.md:3 |
| msgid "" |
| "A _variadic_ interface takes an arbitrary number of arguments. For example, " |
| "`println!` can take an arbitrary number of arguments, as determined by the " |
| "format string." |
| msgstr "" |
| "가변 인자 인터페이스는 임의의 개수의 인자를 취합니다. 예를 들어, `println!`" |
| "은 형식 문자열에 따라 결정되는 임의의 개수의 인자를 취할 수 있습니다." |
| |
| #: src/macros/variadics.md:7 |
| msgid "" |
| "We can extend our `calculate!` macro from the previous section to be " |
| "variadic:" |
| msgstr "" |
| "이전 섹션의 `calculate!` 매크로를 가변 인자를 취하도록 확장할 수 있습니다:" |
| |
| #: src/macros/variadics.md:11 |
| msgid "// The pattern for a single `eval`\n" |
| msgstr "// 단일 `eval`을 위한 패턴\n" |
| |
| #: src/macros/variadics.md:14 |
| msgid "// Force types to be integers\n" |
| msgstr "// 타입을 정수로 강제합니다\n" |
| |
| #: src/macros/variadics.md:19 |
| msgid "// Decompose multiple `eval`s recursively\n" |
| msgstr "// 여러 개의 `eval`을 재귀적으로 분해합니다\n" |
| |
| #: src/macros/variadics.md:27 |
| msgid "// Look ma! Variadic `calculate!`!\n" |
| msgstr "// 보세요! 가변 인자 `calculate!`입니다!\n" |
| |
| #: src/error.md:3 |
| msgid "" |
| "Error handling is the process of handling the possibility of failure. For " |
| "example, failing to read a file and then continuing to use that _bad_ input " |
| "would clearly be problematic. Noticing and explicitly managing those errors " |
| "saves the rest of the program from various pitfalls." |
| msgstr "" |
| "에러 핸들링은 실패 가능성을 처리하는 과정입니다. 예를 들어, 파일을 읽는 데 실" |
| "패했는데도 그 *잘못된* 입력을 계속 사용하는 것은 분명히 문제가 될 것입니다. " |
| "이러한 에러를 인지하고 명시적으로 관리하면 프로그램의 나머지 부분을 다양한 함" |
| "정으로부터 보호할 수 있습니다." |
| |
| #: src/error.md:8 |
| msgid "" |
| "There are various ways to deal with errors in Rust, which are described in " |
| "the following subchapters. They all have more or less subtle differences and " |
| "different use cases. As a rule of thumb:" |
| msgstr "" |
| "Rust에는 에러를 처리하는 다양한 방법이 있으며, 이는 이어지는 하위 장에서 설명" |
| "합니다. 이들은 모두 어느 정도 미묘한 차이가 있으며 용도가 다릅니다. 일반적인 " |
| "원칙은 다음과 같습니다:" |
| |
| #: src/error.md:12 |
| msgid "" |
| "An explicit `panic` is mainly useful for tests and dealing with " |
| "unrecoverable errors. For prototyping it can be useful, for example when " |
| "dealing with functions that haven't been implemented yet, but in those cases " |
| "the more descriptive `unimplemented` is better. In tests `panic` is a " |
| "reasonable way to explicitly fail." |
| msgstr "" |
| "명시적인 `panic`은 주로 테스트와 복구 불가능한 에러를 처리하는 데 유용합니" |
| "다. 프로토타이핑을 할 때도 유용할 수 있는데, 예를 들어 아직 구현되지 않은 함" |
| "수를 다룰 때 유용하지만, 그런 경우에는 더 설명적인 `unimplemented`를 사용하" |
| "는 것이 좋습니다. 테스트에서 `panic`은 명시적으로 실패를 알리는 합리적인 방법" |
| "입니다." |
| |
| #: src/error.md:17 |
| msgid "" |
| "The `Option` type is for when a value is optional or when the lack of a " |
| "value is not an error condition. For example the parent of a directory - `/` " |
| "and `C:` don't have one. When dealing with `Option`s, `unwrap` is fine for " |
| "prototyping and cases where it's absolutely certain that there is guaranteed " |
| "to be a value. However `expect` is more useful since it lets you specify an " |
| "error message in case something goes wrong anyway." |
| msgstr "" |
| "`Option` 타입은 값이 선택적이거나 값의 부재가 에러 상황이 아닐 때 사용됩니" |
| "다. 예를 들어 디렉터리의 부모 - `/`와 `C:`는 부모가 없습니다. `Option`을 다" |
| "룰 때, `unwrap`은 프로토타이핑이나 값이 반드시 존재한다고 절대적으로 확신할 " |
| "수 있는 경우에 괜찮습니다. 하지만 `expect`는 무언가 잘못되었을 경우를 대비해 " |
| "에러 메시지를 지정할 수 있게 해주므로 더 유용합니다." |
| |
| #: src/error.md:24 |
| msgid "" |
| "When there is a chance that things do go wrong and the caller has to deal " |
| "with the problem, use `Result`. You can `unwrap` and `expect` them as well " |
| "(please don't do that unless it's a test or quick prototype)." |
| msgstr "" |
| "무언가 잘못될 가능성이 있고 호출자가 그 문제를 처리해야 할 때는 `Result`를 사" |
| "용하세요. `Result`에 대해서도 `unwrap`과 `expect`를 사용할 수 있지만 (테스트" |
| "나 빠른 프로토타입이 아니라면 제발 그렇게 하지 마세요)." |
| |
| #: src/error.md:28 |
| msgid "" |
| "For a more rigorous discussion of error handling, refer to the error " |
| "handling section in the [official book](https://doc.rust-lang.org/book/" |
| "ch09-00-error-handling.html)." |
| msgstr "" |
| "에러 핸들링에 대한 더 엄밀한 논의는 [공식 도서](https://doc.rust-lang.org/" |
| "book/ch09-00-error-handling.html)의 에러 핸들링 섹션을 참조하세요." |
| |
| #: src/error/panic.md:3 |
| msgid "" |
| "The simplest error handling mechanism we will see is `panic`. It prints an " |
| "error message, starts unwinding the stack, and usually exits the program. " |
| "Here, we explicitly call `panic` on our error condition:" |
| msgstr "" |
| "우리가 살펴볼 가장 단순한 에러 핸들링 메커니즘은 `panic`입니다. 이것은 에러 " |
| "메시지를 출력하고, 스택을 되감기(unwind) 시작하며, 보통 프로그램을 종료합니" |
| "다. 여기서는 에러 조건에 대해 명시적으로 `panic`을 호출합니다:" |
| |
| #: src/error/panic.md:9 |
| msgid "// You shouldn't drink too many sugary beverages.\n" |
| msgstr "// 설탕이 든 음료를 너무 많이 마시면 안 됩니다.\n" |
| |
| #: src/error/panic.md:10 src/error/panic.md:17 src/error/abort_unwind.md:10 |
| #: src/error/abort_unwind.md:23 src/error/abort_unwind.md:41 |
| #: src/error/abort_unwind.md:50 src/error/option_unwrap.md:32 |
| #: src/error/option_unwrap.md:43 src/error/option_unwrap.md:50 |
| msgid "\"lemonade\"" |
| msgstr "\"레모네이드\"" |
| |
| #: src/error/panic.md:10 src/error/option_unwrap.md:43 |
| msgid "\"AAAaaaaa!!!!\"" |
| msgstr "\"으아아아아!!!!\"" |
| |
| #: src/error/panic.md:12 src/error/abort_unwind.md:17 |
| #: src/error/abort_unwind.md:44 |
| msgid "\"Some refreshing {} is all I need.\"" |
| msgstr "\"상쾌한 {}만 있으면 돼요.\"" |
| |
| #: src/error/panic.md:16 src/error/abort_unwind.md:22 |
| #: src/error/abort_unwind.md:49 src/error/option_unwrap.md:49 |
| msgid "\"water\"" |
| msgstr "\"물\"" |
| |
| #: src/error/panic.md:18 |
| msgid "\"still water\"" |
| msgstr "\"생수\"" |
| |
| #: src/error/panic.md:22 |
| msgid "" |
| "The first call to `drink` works. The second panics and thus the third is " |
| "never called." |
| msgstr "" |
| "첫 번째 `drink` 호출은 작동합니다. 두 번째는 패닉을 일으키며, 따라서 세 번째" |
| "는 결코 호출되지 않습니다." |
| |
| #: src/error/abort_unwind.md:1 |
| msgid "`abort` and `unwind`" |
| msgstr "`abort`와 `unwind`" |
| |
| #: src/error/abort_unwind.md:3 |
| msgid "" |
| "The previous section illustrates the error handling mechanism `panic`. " |
| "Different code paths can be conditionally compiled based on the panic " |
| "setting. The current values available are `unwind` and `abort`." |
| msgstr "" |
| "이전 섹션에서는 에러 핸들링 메커니즘인 `panic`을 설명했습니다. 패닉 설정에 따" |
| "라 서로 다른 코드 경로를 조건부로 컴파일할 수 있습니다. 현재 사용 가능한 값" |
| "은 `unwind`와 `abort`입니다." |
| |
| #: src/error/abort_unwind.md:5 |
| msgid "" |
| "Building on the prior lemonade example, we explicitly use the panic strategy " |
| "to exercise different lines of code." |
| msgstr "" |
| "앞선 레모네이드 예제를 바탕으로, 서로 다른 코드 라인을 실행해 보기 위해 패닉 " |
| "전략을 명시적으로 사용합니다." |
| |
| #: src/error/abort_unwind.md:9 |
| msgid "// You shouldn't drink too much sugary beverages.\n" |
| msgstr "// 설탕이 든 음료를 너무 많이 마시면 안 됩니다.\n" |
| |
| #: src/error/abort_unwind.md:11 |
| msgid "\"abort\"" |
| msgstr "\"abort\"" |
| |
| #: src/error/abort_unwind.md:12 src/error/abort_unwind.md:37 |
| msgid "\"This is not your party. Run!!!!\"" |
| msgstr "\"여긴 당신 파티가 아니에요. 도망쳐요!!!!\"" |
| |
| #: src/error/abort_unwind.md:14 src/error/abort_unwind.md:32 |
| msgid "\"Spit it out!!!!\"" |
| msgstr "\"뱉어내요!!!!\"" |
| |
| #: src/error/abort_unwind.md:27 |
| msgid "" |
| "Here is another example focusing on rewriting `drink()` and explicitly use " |
| "the `unwind` keyword." |
| msgstr "" |
| "여기 `drink()`를 다시 작성하고 `unwind` 키워드를 명시적으로 사용하는 또 다른 " |
| "예제가 있습니다." |
| |
| #: src/error/abort_unwind.md:30 src/error/abort_unwind.md:35 |
| msgid "\"unwind\"" |
| msgstr "\"unwind\"" |
| |
| #: src/error/abort_unwind.md:54 |
| msgid "" |
| "The panic strategy can be set from the command line by using `abort` or " |
| "`unwind`." |
| msgstr "" |
| "패닉 전략은 커맨드 라인에서 `abort` 또는 `unwind`를 사용하여 설정할 수 있습니" |
| "다." |
| |
| #: src/error/option_unwrap.md:3 |
| msgid "" |
| "In the last example, we showed that we can induce program failure at will. " |
| "We told our program to `panic` if we drink a sugary lemonade. But what if we " |
| "expect _some_ drink but don't receive one? That case would be just as bad, " |
| "so it needs to be handled!" |
| msgstr "" |
| "지난 예제에서, 우리는 프로그램을 의도적으로 실패하게 만들 수 있음을 보여주었" |
| "습니다. 설탕이 든 레모네이드를 마시면 `panic`하도록 프로그램에 지시했습니다. " |
| "하지만 음료가 있을 것으로 예상했는데 아무것도 받지 못하면 어떨까요? 그 경우" |
| "도 마찬가지로 나쁠 것이므로, 처리가 필요합니다!" |
| |
| #: src/error/option_unwrap.md:8 |
| msgid "" |
| "We _could_ test this against the null string (`\"\"`) as we do with a " |
| "lemonade. Since we're using Rust, let's instead have the compiler point out " |
| "cases where there's no drink." |
| msgstr "" |
| "레모네이드의 경우처럼 빈 문자열(`\"\"`)인지 테스트할 수도 있습니다. 하지만 우" |
| "리는 Rust를 사용하고 있으니, 대신 컴파일러가 음료가 없는 경우를 지적하도록 해" |
| "봅시다." |
| |
| #: src/error/option_unwrap.md:12 |
| msgid "" |
| "An `enum` called `Option<T>` in the `std` library is used when absence is a " |
| "possibility. It manifests itself as one of two \"options\":" |
| msgstr "" |
| "표준 라이브러리의 `Option<T>`라는 열거형은 부재의 가능성이 있을 때 사용됩니" |
| "다. 이는 두 가지 \"옵션\" 중 하나로 나타납니다:" |
| |
| #: src/error/option_unwrap.md:15 |
| msgid "`Some(T)`: An element of type `T` was found" |
| msgstr "`Some(T)`: `T` 타입의 요소가 발견됨" |
| |
| #: src/error/option_unwrap.md:16 |
| msgid "`None`: No element was found" |
| msgstr "`None`: 요소가 발견되지 않음" |
| |
| #: src/error/option_unwrap.md:18 |
| msgid "" |
| "These cases can either be explicitly handled via `match` or implicitly with " |
| "`unwrap`. Implicit handling will either return the inner element or `panic`." |
| msgstr "" |
| "이러한 경우들은 `match`를 통해 명시적으로 처리하거나 `unwrap`을 통해 암시적으" |
| "로 처리할 수 있습니다. 암시적 처리는 내부 요소를 반환하거나 `panic`을 일으킵" |
| "니다." |
| |
| #: src/error/option_unwrap.md:21 |
| msgid "" |
| "Note that it's possible to manually customize `panic` with [expect](https://" |
| "doc.rust-lang.org/std/option/enum.Option.html#method.expect), but `unwrap` " |
| "otherwise leaves us with a less meaningful output than explicit handling. In " |
| "the following example, explicit handling yields a more controlled result " |
| "while retaining the option to `panic` if desired." |
| msgstr "" |
| "[expect](https://doc.rust-lang.org/std/option/enum.Option.html#method.expect)" |
| "를 사용하여 `panic`을 수동으로 커스터마이징할 수 있지만, 그렇지 않으면 " |
| "`unwrap`은 명시적 처리보다 덜 의미 있는 출력을 남깁니다. 다음 예제에서, 명시" |
| "적 처리는 원하는 경우 `panic`할 수 있는 옵션을 유지하면서도 더 제어된 결과를 " |
| "제공합니다." |
| |
| #: src/error/option_unwrap.md:27 |
| msgid "" |
| "// The adult has seen it all, and can handle any drink well.\n" |
| "// All drinks are handled explicitly using `match`.\n" |
| msgstr "" |
| "// 어른은 모든 것을 보았고, 어떤 음료든 잘 다룰 수 있습니다.\n" |
| "// 모든 음료는 `match`를 사용하여 명시적으로 처리됩니다.\n" |
| |
| #: src/error/option_unwrap.md:30 |
| msgid "// Specify a course of action for each case.\n" |
| msgstr "// 각 경우에 대한 행동 지침을 지정합니다.\n" |
| |
| #: src/error/option_unwrap.md:32 |
| msgid "\"Yuck! Too sugary.\"" |
| msgstr "\"윽! 너무 달아요.\"" |
| |
| #: src/error/option_unwrap.md:33 |
| msgid "\"{}? How nice.\"" |
| msgstr "\"{}요? 좋네요.\"" |
| |
| #: src/error/option_unwrap.md:34 |
| msgid "\"No drink? Oh well.\"" |
| msgstr "\"음료가 없나요? 뭐, 어쩔 수 없죠.\"" |
| |
| #: src/error/option_unwrap.md:37 |
| msgid "" |
| "// Others will `panic` before drinking sugary drinks.\n" |
| "// All drinks are handled implicitly using `unwrap`.\n" |
| msgstr "" |
| "// 다른 사람들은 단 음료를 마시기 전에 `panic`할 것입니다.\n" |
| "// 모든 음료는 `unwrap`을 사용하여 암시적으로 처리됩니다.\n" |
| |
| #: src/error/option_unwrap.md:41 |
| msgid "// `unwrap` returns a `panic` when it receives a `None`.\n" |
| msgstr "// `unwrap`은 `None`을 받으면 `panic`을 반환합니다.\n" |
| |
| #: src/error/option_unwrap.md:45 |
| msgid "\"I love {}s!!!!!\"" |
| msgstr "\"난 {}가 너무 좋아요!!!!!\"" |
| |
| #: src/error/option_unwrap.md:57 |
| msgid "\"coffee\"" |
| msgstr "\"커피\"" |
| |
| #: src/error/option_unwrap/question_mark.md:3 |
| msgid "" |
| "You can unpack `Option`s by using `match` statements, but it's often easier " |
| "to use the `?` operator. If `x` is an `Option`, then evaluating `x?` will " |
| "return the underlying value if `x` is `Some`, otherwise it will terminate " |
| "whatever function is being executed and return `None`." |
| msgstr "" |
| "`match` 문을 사용하여 `Option`을 풀 수(unpack) 있지만, `?` 연산자를 사용하는 " |
| "것이 더 쉬울 때가 많습니다. 만약 `x`가 `Option`이라면, `x?`를 평가할 때 `x`" |
| "가 `Some`이면 그 내부 값을 반환하고, 그렇지 않으면 실행 중인 함수를 종료하고 " |
| "`None`을 반환합니다." |
| |
| #: src/error/option_unwrap/question_mark.md:10 |
| msgid "" |
| "// If `current_age` is `None`, this returns `None`.\n" |
| " // If `current_age` is `Some`, the inner `u8` value + 1\n" |
| " // gets assigned to `next_age`\n" |
| msgstr "" |
| "// 만약 `current_age`가 `None`이면, 이는 `None`을 반환합니다.\n" |
| " // 만약 `current_age`가 `Some`이면, 내부의 `u8` 값 + 1이\n" |
| " // `next_age`에 할당됩니다.\n" |
| |
| #: src/error/option_unwrap/question_mark.md:14 |
| msgid "\"Next year I will be {}\"" |
| msgstr "\"내년에 저는 {}살이 됩니다\"" |
| |
| #: src/error/option_unwrap/question_mark.md:18 |
| msgid "You can chain many `?`s together to make your code much more readable." |
| msgstr "" |
| "여러 개의 `?`를 체인으로 연결하여 코드를 훨씬 더 읽기 쉽게 만들 수 있습니다." |
| |
| #: src/error/option_unwrap/question_mark.md:38 |
| msgid "" |
| "// Gets the area code of the phone number of the person's job, if it " |
| "exists.\n" |
| msgstr "// 사람의 직장 전화번호의 지역 번호가 존재한다면 가져옵니다.\n" |
| |
| #: src/error/option_unwrap/question_mark.md:40 |
| msgid "" |
| "// This would need many nested `match` statements without the `?` operator.\n" |
| " // It would take a lot more code - try writing it yourself and see " |
| "which\n" |
| " // is easier.\n" |
| msgstr "" |
| "// `?` 연산자가 없다면 많은 중첩된 `match` 문이 필요했을 것입니다.\n" |
| " // 훨씬 더 많은 코드가 필요할 것입니다 - 직접 작성해 보고 어느 쪽이 " |
| "더 쉬운지\n" |
| " // 확인해 보세요.\n" |
| |
| #: src/error/option_unwrap/map.md:3 |
| msgid "" |
| "`match` is a valid method for handling `Option`s. However, you may " |
| "eventually find heavy usage tedious, especially with operations only valid " |
| "with an input. In these cases, [combinators](https://doc.rust-lang.org/" |
| "reference/glossary.html#combinator) can be used to manage control flow in a " |
| "modular fashion." |
| msgstr "" |
| "`match`는 `Option`을 처리하는 유효한 방법입니다. 하지만 특히 입력이 있을 때" |
| "만 유효한 연산들의 경우, 과도한 사용은 지루할 수 있습니다. 이런 경우, [콤비네" |
| "이터(combinators)](https://doc.rust-lang.org/reference/" |
| "glossary.html#combinator)를 사용하여 모듈식으로 제어 흐름을 관리할 수 있습니" |
| "다." |
| |
| #: src/error/option_unwrap/map.md:8 |
| msgid "" |
| "`Option` has a built in method called `map()`, a combinator for the simple " |
| "mapping of `Some -> Some` and `None -> None`. Multiple `map()` calls can be " |
| "chained together for even more flexibility." |
| msgstr "" |
| "`Option`에는 `Some -> Some` 및 `None -> None`의 단순 매핑을 위한 콤비네이터" |
| "인 `map()` 메서드가 내장되어 있습니다. 여러 개의 `map()` 호출을 체인으로 연결" |
| "하여 훨씬 더 유연하게 사용할 수 있습니다." |
| |
| #: src/error/option_unwrap/map.md:12 |
| msgid "" |
| "In the following example, `process()` replaces all functions previous to it " |
| "while staying compact." |
| msgstr "" |
| "다음 예제에서 `process()`는 간결함을 유지하면서 그 이전의 모든 함수들을 대체" |
| "합니다." |
| |
| #: src/error/option_unwrap/map.md:23 |
| msgid "" |
| "// Peeling food. If there isn't any, then return `None`.\n" |
| "// Otherwise, return the peeled food.\n" |
| msgstr "" |
| "// 음식을 껍질 벗깁니다. 음식이 없다면 `None`을 반환합니다.\n" |
| "// 그렇지 않으면 껍질을 벗긴 음식을 반환합니다.\n" |
| |
| #: src/error/option_unwrap/map.md:32 |
| msgid "" |
| "// Chopping food. If there isn't any, then return `None`.\n" |
| "// Otherwise, return the chopped food.\n" |
| msgstr "" |
| "// 음식을 썹니다. 음식이 없다면 `None`을 반환합니다.\n" |
| "// 그렇지 않으면 썬 음식을 반환합니다.\n" |
| |
| #: src/error/option_unwrap/map.md:41 |
| msgid "" |
| "// Cooking food. Here, we showcase `map()` instead of `match` for case " |
| "handling.\n" |
| msgstr "" |
| "// 음식을 요리합니다. 여기서는 케이스 처리를 위해 `match` 대신 `map()`을 보여" |
| "줍니다.\n" |
| |
| #: src/error/option_unwrap/map.md:46 |
| msgid "" |
| "// A function to peel, chop, and cook food all in sequence.\n" |
| "// We chain multiple uses of `map()` to simplify the code.\n" |
| msgstr "" |
| "// 음식을 순서대로 껍질 벗기고, 썰고, 요리하는 함수입니다.\n" |
| "// 코드를 단순화하기 위해 `map()`을 여러 번 체인으로 연결합니다.\n" |
| |
| #: src/error/option_unwrap/map.md:54 |
| msgid "// Check whether there's food or not before trying to eat it!\n" |
| msgstr "// 먹기 전에 음식이 있는지 없는지 확인합니다!\n" |
| |
| #: src/error/option_unwrap/map.md:58 |
| msgid "\"Mmm. I love {:?}\"" |
| msgstr "\"음~ 전 {:?}가 정말 좋아요\"" |
| |
| #: src/error/option_unwrap/map.md:59 |
| msgid "\"Oh no! It wasn't edible.\"" |
| msgstr "\"오 이런! 먹을 수 있는 게 아니었어요.\"" |
| |
| #: src/error/option_unwrap/map.md:70 |
| msgid "// Let's try the simpler looking `process()` now.\n" |
| msgstr "// 이제 더 간단해 보이는 `process()`를 시도해 봅시다.\n" |
| |
| #: src/error/option_unwrap/map.md:81 |
| msgid "" |
| "[closures](../../fn/closures.md), [`Option`](https://doc.rust-lang.org/std/" |
| "option/enum.Option.html), [`Option::map()`](https://doc.rust-lang.org/std/" |
| "option/enum.Option.html#method.map)" |
| msgstr "" |
| "[클로저](../../fn/closures.md), [`Option`](https://doc.rust-lang.org/std/" |
| "option/enum.Option.html), [`Option::map()`](https://doc.rust-lang.org/std/" |
| "option/enum.Option.html#method.map)" |
| |
| #: src/error/option_unwrap/and_then.md:3 |
| msgid "" |
| "`map()` was described as a chainable way to simplify `match` statements. " |
| "However, using `map()` on a function that returns an `Option<T>` results in " |
| "the nested `Option<Option<T>>`. Chaining multiple calls together can then " |
| "become confusing. That's where another combinator called `and_then()`, known " |
| "in some languages as flatmap, comes in." |
| msgstr "" |
| "`map()`은 `match` 문을 단순화하기 위한 체인 가능한 방법으로 설명되었습니다. " |
| "하지만 `Option<T>`를 반환하는 함수에 `map()`을 사용하면 중첩된 " |
| "`Option<Option<T>>`가 생성됩니다. 여러 호출을 함께 체인으로 연결하는 것은 혼" |
| "란스러울 수 있습니다. 이때 다른 언어에서 `flatmap`으로 알려진 `and_then()`이" |
| "라는 또 다른 콤비네이터가 등장합니다." |
| |
| #: src/error/option_unwrap/and_then.md:9 |
| msgid "" |
| "`and_then()` calls its function input with the wrapped value and returns the " |
| "result. If the `Option` is `None`, then it returns `None` instead." |
| msgstr "" |
| "`and_then()`은 래핑된 값을 가지고 함수 입력을 호출하고 그 결과를 반환합니다. " |
| "만약 `Option`이 `None`이라면, 대신 `None`을 반환합니다." |
| |
| #: src/error/option_unwrap/and_then.md:11 |
| msgid "" |
| "In the following example, `cookable_v3()` results in an `Option<Food>`. " |
| "Using `map()` instead of `and_then()` would have given an " |
| "`Option<Option<Food>>`, which is an invalid type for `eat()`." |
| msgstr "" |
| "다음 예제에서, `cookable_v3()`는 `Option<Food>`를 결과로 냅니다. " |
| "`and_then()` 대신 `map()`을 사용했다면 `Option<Option<Food>>`를 얻었을 것이" |
| "며, 이는 `eat()`에 대해 유효하지 않은 타입입니다." |
| |
| #: src/error/option_unwrap/and_then.md:20 |
| msgid "// We don't have the ingredients to make Sushi.\n" |
| msgstr "// 우리는 스시를 만들 재료가 없습니다.\n" |
| |
| #: src/error/option_unwrap/and_then.md:28 |
| msgid "// We have the recipe for everything except Cordon Bleu.\n" |
| msgstr "" |
| "// 우리는 코르동 블뢰(Cordon Bleu)를 제외한 모든 것의 레시피를 가지고 있습니" |
| "다.\n" |
| |
| #: src/error/option_unwrap/and_then.md:36 |
| msgid "" |
| "// To make a dish, we need both the recipe and the ingredients.\n" |
| "// We can represent the logic with a chain of `match`es:\n" |
| msgstr "" |
| "// 요리를 하려면 레시피와 재료가 모두 필요합니다.\n" |
| "// 우리는 이 로직을 `match`들의 체인으로 표현할 수 있습니다:\n" |
| |
| #: src/error/option_unwrap/and_then.md:45 |
| msgid "" |
| "// This can conveniently be rewritten more compactly with `and_then()`:\n" |
| msgstr "// 이는 `and_then()`을 사용하여 더 간결하게 다시 작성될 수 있습니다:\n" |
| |
| #: src/error/option_unwrap/and_then.md:50 |
| msgid "" |
| "// Otherwise we'd need to `flatten()` an `Option<Option<Food>>`\n" |
| "// to get an `Option<Food>`:\n" |
| msgstr "" |
| "// 그렇지 않다면 `Option<Food>`를 얻기 위해 `Option<Option<Food>>`를 " |
| "`flatten()`해야 할 것입니다:\n" |
| |
| #: src/error/option_unwrap/and_then.md:59 |
| msgid "\"Yay! On {:?} we get to eat {:?}.\"" |
| msgstr "\"야호! {:?}에 우리는 {:?}를 먹게 되었어요.\"" |
| |
| #: src/error/option_unwrap/and_then.md:60 |
| msgid "\"Oh no. We don't get to eat on {:?}?\"" |
| msgstr "\"오 이런. {:?}에는 못 먹는 건가요?\"" |
| |
| #: src/error/option_unwrap/and_then.md:75 |
| msgid "" |
| "[closures](../../fn/closures.md), [`Option`](https://doc.rust-lang.org/std/" |
| "option/enum.Option.html), [`Option::and_then()`](https://doc.rust-lang.org/" |
| "std/option/enum.Option.html#method.and_then), and [`Option::flatten()`]" |
| "(https://doc.rust-lang.org/std/option/enum.Option.html#method.flatten)" |
| msgstr "" |
| "[클로저](../../fn/closures.md), [`Option`](https://doc.rust-lang.org/std/" |
| "option/enum.Option.html), [`Option::and_then()`](https://doc.rust-lang.org/" |
| "std/option/enum.Option.html#method.and_then), 그리고 [`Option::flatten()`]" |
| "(https://doc.rust-lang.org/std/option/enum.Option.html#method.flatten)" |
| |
| #: src/error/option_unwrap/defaults.md:1 |
| msgid "Unpacking options and defaults" |
| msgstr "Option 풀기와 기본값" |
| |
| #: src/error/option_unwrap/defaults.md:3 |
| msgid "" |
| "There is more than one way to unpack an `Option` and fall back on a default " |
| "if it is `None`. To choose the one that meets our needs, we need to consider " |
| "the following:" |
| msgstr "" |
| "`Option`이 `None`일 때 이를 풀고 기본값으로 돌아가는 방법은 여러 가지가 있습" |
| "니다. 우리의 필요에 맞는 것을 선택하려면 다음을 고려해야 합니다:" |
| |
| #: src/error/option_unwrap/defaults.md:5 |
| msgid "do we need eager or lazy evaluation?" |
| msgstr "" |
| "조급한(eager) 평가가 필요한가요, 아니면 느긋한(lazy) 평가가 필요한가요?" |
| |
| #: src/error/option_unwrap/defaults.md:6 |
| msgid "" |
| "do we need to keep the original empty value intact, or modify it in place?" |
| msgstr "" |
| "원래의 빈 값을 그대로 두어야 하나요, 아니면 그 자리에서 수정해야 하나요?" |
| |
| #: src/error/option_unwrap/defaults.md:8 |
| msgid "`or()` is chainable, evaluates eagerly, keeps empty value intact" |
| msgstr "`or()`은 체인 가능하며, 조급하게 평가하고, 빈 값을 그대로 유지합니다." |
| |
| #: src/error/option_unwrap/defaults.md:10 |
| msgid "" |
| "`or()`is chainable and eagerly evaluates its argument, as is shown in the " |
| "following example. Note that because `or`'s arguments are evaluated eagerly, " |
| "the variable passed to `or` is moved." |
| msgstr "" |
| "`or()`은 체인 가능하며 다음 예제에서 보듯 인자를 조급하게 평가합니다. `or`의 " |
| "인자들은 조급하게 평가되기 때문에, `or`에 전달된 변수는 이동(move)된다는 점" |
| "에 유의하세요." |
| |
| #: src/error/option_unwrap/defaults.md:22 |
| #: src/error/option_unwrap/defaults.md:55 |
| msgid "\"first_available_fruit: {:?}\"" |
| msgstr "\"first_available_fruit: {:?}\"" |
| |
| #: src/error/option_unwrap/defaults.md:23 |
| msgid "// first_available_fruit: Some(Orange)\n" |
| msgstr "// first_available_fruit: Some(Orange)\n" |
| |
| #: src/error/option_unwrap/defaults.md:25 |
| msgid "" |
| "// `or` moves its argument.\n" |
| " // In the example above, `or(orange)` returned a `Some`, so `or(apple)` " |
| "was not invoked.\n" |
| " // But the variable named `apple` has been moved regardless, and cannot " |
| "be used anymore.\n" |
| " // println!(\"Variable apple was moved, so this line won't compile: {:?}" |
| "\", apple);\n" |
| " // TODO: uncomment the line above to see the compiler error\n" |
| msgstr "" |
| "// `or`는 인자를 이동시킵니다.\n" |
| " // 위 예제에서 `or(orange)`가 `Some`을 반환했으므로 `or(apple)`은 호출되" |
| "지 않았습니다.\n" |
| " // 하지만 `apple`이라는 이름의 변수는 상관없이 이동되었으며, 더 이상 사용" |
| "할 수 없습니다.\n" |
| " // println!(\"Variable apple was moved, so this line won't compile: {:?}" |
| "\", apple);\n" |
| " // TODO: 위 줄의 주석을 해제하여 컴파일러 에러를 확인해 보세요.\n" |
| |
| #: src/error/option_unwrap/defaults.md:33 |
| msgid "`or_else()` is chainable, evaluates lazily, keeps empty value intact" |
| msgstr "" |
| "`or_else()`는 체인 가능하며, 느긋하게 평가하고, 빈 값을 그대로 유지합니다." |
| |
| #: src/error/option_unwrap/defaults.md:35 |
| msgid "" |
| "Another alternative is to use `or_else`, which is also chainable, and " |
| "evaluates lazily, as is shown in the following example:" |
| msgstr "" |
| "또 다른 대안은 `or_else`를 사용하는 것입니다. 이 역시 체인 가능하며 다음 예제" |
| "에서 보듯 느긋하게 평가합니다:" |
| |
| #: src/error/option_unwrap/defaults.md:44 |
| msgid "\"Providing kiwi as fallback\"" |
| msgstr "\"키위를 대체값으로 제공함\"" |
| |
| #: src/error/option_unwrap/defaults.md:48 |
| #: src/error/option_unwrap/defaults.md:93 |
| msgid "\"Providing lemon as fallback\"" |
| msgstr "\"레몬을 대체값으로 제공함\"" |
| |
| #: src/error/option_unwrap/defaults.md:56 |
| msgid "" |
| "// Providing kiwi as fallback\n" |
| " // first_available_fruit: Some(Kiwi)\n" |
| msgstr "" |
| "// 키위를 대체값으로 제공함\n" |
| " // first_available_fruit: Some(Kiwi)\n" |
| |
| #: src/error/option_unwrap/defaults.md:61 |
| msgid "`get_or_insert()` evaluates eagerly, modifies empty value in place" |
| msgstr "`get_or_insert()`는 조급하게 평가하며, 빈 값을 그 자리에서 수정합니다." |
| |
| #: src/error/option_unwrap/defaults.md:63 |
| msgid "" |
| "To make sure that an `Option` contains a value, we can use `get_or_insert` " |
| "to modify it in place with a fallback value, as is shown in the following " |
| "example. Note that `get_or_insert` eagerly evaluates its parameter, so " |
| "variable `apple` is moved:" |
| msgstr "" |
| "`Option`에 값이 포함되도록 보장하기 위해, 다음 예제에서 보듯 `get_or_insert`" |
| "를 사용하여 대체값으로 그 자리에서 수정할 수 있습니다. `get_or_insert`는 파라" |
| "미터를 조급하게 평가하므로, `apple` 변수는 이동된다는 점에 유의하세요." |
| |
| #: src/error/option_unwrap/defaults.md:73 |
| #: src/error/option_unwrap/defaults.md:98 |
| msgid "\"first_available_fruit is: {:?}\"" |
| msgstr "\"first_available_fruit is: {:?}\"" |
| |
| #: src/error/option_unwrap/defaults.md:74 |
| #: src/error/option_unwrap/defaults.md:99 |
| msgid "\"my_fruit is: {:?}\"" |
| msgstr "\"my_fruit is: {:?}\"" |
| |
| #: src/error/option_unwrap/defaults.md:75 |
| msgid "" |
| "// first_available_fruit is: Apple\n" |
| " // my_fruit is: Some(Apple)\n" |
| " //println!(\"Variable named `apple` is moved: {:?}\", apple);\n" |
| " // TODO: uncomment the line above to see the compiler error\n" |
| msgstr "" |
| "// first_available_fruit is: Apple\n" |
| " // my_fruit is: Some(Apple)\n" |
| " //println!(\"apple이라는 이름의 변수는 이동되었습니다: {:?}\", apple);\n" |
| " // TODO: 위 줄의 주석을 해제하여 컴파일러 에러를 확인해 보세요.\n" |
| |
| #: src/error/option_unwrap/defaults.md:82 |
| msgid "`get_or_insert_with()` evaluates lazily, modifies empty value in place" |
| msgstr "" |
| "`get_or_insert_with()`는 느긋하게 평가하며, 빈 값을 그 자리에서 수정합니다." |
| |
| #: src/error/option_unwrap/defaults.md:84 |
| msgid "" |
| "Instead of explicitly providing a value to fall back on, we can pass a " |
| "closure to `get_or_insert_with`, as follows:" |
| msgstr "" |
| "대체할 값을 명시적으로 제공하는 대신, 다음과 같이 `get_or_insert_with`에 클로" |
| "저를 전달할 수 있습니다:" |
| |
| #: src/error/option_unwrap/defaults.md:100 |
| msgid "" |
| "// Providing lemon as fallback\n" |
| " // first_available_fruit is: Lemon\n" |
| " // my_fruit is: Some(Lemon)\n" |
| msgstr "" |
| "// 레몬을 대체값으로 제공함\n" |
| " // first_available_fruit is: Lemon\n" |
| " // my_fruit is: Some(Lemon)\n" |
| |
| #: src/error/option_unwrap/defaults.md:104 |
| msgid "" |
| "// If the Option has a value, it is left unchanged, and the closure is not " |
| "invoked\n" |
| msgstr "" |
| "// Option에 값이 있으면 변경되지 않은 채로 유지되며, 클로저는 호출되지 않습니" |
| "다.\n" |
| |
| #: src/error/option_unwrap/defaults.md:107 |
| msgid "\"should_be_apple is: {:?}\"" |
| msgstr "\"should_be_apple is: {:?}\"" |
| |
| #: src/error/option_unwrap/defaults.md:108 |
| msgid "\"my_apple is unchanged: {:?}\"" |
| msgstr "\"my_apple is unchanged: {:?}\"" |
| |
| #: src/error/option_unwrap/defaults.md:109 |
| msgid "" |
| "// The output is a follows. Note that the closure `get_lemon_as_fallback` is " |
| "not invoked\n" |
| " // should_be_apple is: Apple\n" |
| " // my_apple is unchanged: Some(Apple)\n" |
| msgstr "" |
| "// 출력은 다음과 같습니다. `get_lemon_as_fallback` 클로저가 호출되지 않았음" |
| "에 유의하세요.\n" |
| " // should_be_apple is: Apple\n" |
| " // my_apple is unchanged: Some(Apple)\n" |
| |
| #: src/error/option_unwrap/defaults.md:117 |
| msgid "" |
| "[`closures`](https://doc.rust-lang.org/book/ch13-01-closures.html), " |
| "[`get_or_insert`](https://doc.rust-lang.org/core/option/" |
| "enum.Option.html#method.get_or_insert), [`get_or_insert_with`](https://" |
| "doc.rust-lang.org/core/option/enum.Option.html#method.get_or_insert_with), " |
| "[`moved variables`](https://doc.rust-lang.org/book/ch04-02-references-and-" |
| "borrowing.html), [`or`](https://doc.rust-lang.org/core/option/" |
| "enum.Option.html#method.or), [`or_else`](https://doc.rust-lang.org/core/" |
| "option/enum.Option.html#method.or_else)" |
| msgstr "" |
| "[`클로저(closures)`](https://doc.rust-lang.org/book/ch13-01-closures.html), " |
| "[`get_or_insert`](https://doc.rust-lang.org/core/option/" |
| "enum.Option.html#method.get_or_insert), [`get_or_insert_with`](https://" |
| "doc.rust-lang.org/core/option/enum.Option.html#method.get_or_insert_with), [`" |
| "이동된 변수(moved variables)`](https://doc.rust-lang.org/book/ch04-02-" |
| "references-and-borrowing.html), [`or`](https://doc.rust-lang.org/core/option/" |
| "enum.Option.html#method.or), [`or_else`](https://doc.rust-lang.org/core/" |
| "option/enum.Option.html#method.or_else)" |
| |
| #: src/error/result.md:3 |
| msgid "" |
| "[`Result`](https://doc.rust-lang.org/std/result/enum.Result.html) is a " |
| "richer version of the [`Option`](https://doc.rust-lang.org/std/option/" |
| "enum.Option.html) type that describes possible _error_ instead of possible " |
| "_absence_." |
| msgstr "" |
| "[`Result`](https://doc.rust-lang.org/std/result/enum.Result.html)은 발생 가능" |
| "한 *에러*를 설명하는, [`Option`](https://doc.rust-lang.org/std/option/" |
| "enum.Option.html) 타입의 더 풍부한 버전입니다." |
| |
| #: src/error/result.md:6 |
| msgid "That is, `Result<T, E>` could have one of two outcomes:" |
| msgstr "즉, `Result<T, E>`는 다음 두 가지 결과 중 하나를 가질 수 있습니다:" |
| |
| #: src/error/result.md:8 |
| msgid "`Ok(T)`: An element `T` was found" |
| msgstr "`Ok(T)`: 요소 `T`가 발견됨" |
| |
| #: src/error/result.md:9 |
| msgid "`Err(E)`: An error was found with element `E`" |
| msgstr "`Err(E)`: 요소 `E`와 함께 에러가 발견됨" |
| |
| #: src/error/result.md:11 |
| msgid "" |
| "By convention, the expected outcome is `Ok` while the unexpected outcome is " |
| "`Err`." |
| msgstr "관례적으로 기대되는 결과는 `Ok`이며, 기대하지 않은 결과는 `Err`입니다." |
| |
| #: src/error/result.md:13 |
| msgid "" |
| "Like `Option`, `Result` has many methods associated with it. `unwrap()`, for " |
| "example, either yields the element `T` or `panic`s. For case handling, there " |
| "are many combinators between `Result` and `Option` that overlap." |
| msgstr "" |
| "`Option`과 마찬가지로, `Result`도 많은 메서드들을 가지고 있습니다. 예를 들어 " |
| "`unwrap()`은 요소 `T`를 내놓거나 `panic`을 일으킵니다. 케이스 처리를 위해 " |
| "`Result`와 `Option` 사이에는 겹치는 많은 콤비네이터들이 있습니다." |
| |
| #: src/error/result.md:17 |
| msgid "" |
| "In working with Rust, you will likely encounter methods that return the " |
| "`Result` type, such as the [`parse()`](https://doc.rust-lang.org/std/" |
| "primitive.str.html#method.parse) method. It might not always be possible to " |
| "parse a string into the other type, so `parse()` returns a `Result` " |
| "indicating possible failure." |
| msgstr "" |
| "Rust로 작업하다 보면 [`parse()`](https://doc.rust-lang.org/std/" |
| "primitive.str.html#method.parse) 메서드와 같이 `Result` 타입을 반환하는 메서" |
| "드들을 자주 만나게 될 것입니다. 문자열을 다른 타입으로 파싱하는 것이 항상 가" |
| "능한 것은 아니므로, `parse()`는 실패 가능성을 나타내는 `Result`를 반환합니다." |
| |
| #: src/error/result.md:22 |
| msgid "" |
| "Let's see what happens when we successfully and unsuccessfully `parse()` a " |
| "string:" |
| msgstr "" |
| "문자열을 `parse()` 하는 데 성공했을 때와 실패했을 때 어떤 일이 일어나는지 봅" |
| "시다:" |
| |
| #: src/error/result.md:26 |
| msgid "// Let's try using `unwrap()` to get the number out. Will it bite us?\n" |
| msgstr "// `unwrap()`을 사용하여 숫자를 꺼내봅시다. 문제가 생길까요?\n" |
| |
| #: src/error/result.md:33 src/error/result.md:36 |
| #: src/error/result/result_map.md:42 src/error/result/result_map.md:46 |
| #: src/error/result/result_map.md:75 src/error/result/result_map.md:79 |
| #: src/error/result/result_alias.md:36 src/error/result/result_alias.md:37 |
| #: src/error/result/early_returns.md:36 src/error/result/early_returns.md:37 |
| #: src/error/result/enter_question_mark.md:34 |
| #: src/error/result/enter_question_mark.md:35 |
| #: src/error/result/enter_question_mark.md:67 |
| #: src/error/result/enter_question_mark.md:68 |
| msgid "\"2\"" |
| msgstr "\"2\"" |
| |
| #: src/error/result.md:34 src/error/result.md:37 |
| msgid "\"double is {}\"" |
| msgstr "\"두 배는 {}\"" |
| |
| #: src/error/result.md:36 src/error/result/result_map.md:46 |
| #: src/error/result/result_map.md:79 src/error/result/result_alias.md:37 |
| #: src/error/result/early_returns.md:37 |
| #: src/error/result/enter_question_mark.md:35 |
| #: src/error/result/enter_question_mark.md:68 |
| msgid "\"t\"" |
| msgstr "\"t\"" |
| |
| #: src/error/result.md:41 |
| msgid "" |
| "In the unsuccessful case, `parse()` leaves us with an error for `unwrap()` " |
| "to `panic` on. Additionally, the `panic` exits our program and provides an " |
| "unpleasant error message." |
| msgstr "" |
| "실패한 경우, `parse()`는 `unwrap()`이 `panic`을 일으킬 수 있도록 에러를 남깁" |
| "니다. 게다가 이 `panic`은 프로그램을 종료시키고 불쾌한 에러 메시지를 제공합니" |
| "다." |
| |
| #: src/error/result.md:45 |
| msgid "" |
| "To improve the quality of our error message, we should be more specific " |
| "about the return type and consider explicitly handling the error." |
| msgstr "" |
| "에러 메시지의 품질을 높이려면, 반환 타입에 대해 더 구체적이어야 하며 에러를 " |
| "명시적으로 처리하는 것을 고려해야 합니다." |
| |
| #: src/error/result.md:48 |
| msgid "Using `Result` in `main`" |
| msgstr "`main`에서 `Result` 사용하기" |
| |
| #: src/error/result.md:50 |
| msgid "" |
| "The `Result` type can also be the return type of the `main` function if " |
| "specified explicitly. Typically the `main` function will be of the form:" |
| msgstr "" |
| "`Result` 타입은 명시적으로 지정될 경우 `main` 함수의 반환 타입이 될 수도 있습" |
| "니다. 일반적으로 `main` 함수는 다음과 같은 형태입니다:" |
| |
| #: src/error/result.md:59 |
| msgid "" |
| "However `main` is also able to have a return type of `Result`. If an error " |
| "occurs within the `main` function it will return an error code and print a " |
| "debug representation of the error (using the [`Debug`](https://doc.rust-" |
| "lang.org/std/fmt/trait.Debug.html) trait). The following example shows such " |
| "a scenario and touches on aspects covered in [the following section](result/" |
| "early_returns.md)." |
| msgstr "" |
| "하지만 `main`은 반환 타입으로 `Result`를 가질 수도 있습니다. 만약 `main` 함" |
| "수 내에서 에러가 발생하면, 에러 코드를 반환하고 에러의 디버그 표현([`Debug`]" |
| "(https://doc.rust-lang.org/std/fmt/trait.Debug.html) 트레이트 사용)을 출력합" |
| "니다. 다음 예제는 그러한 시나리오를 보여주며 [다음 섹션](result/" |
| "early_returns.md)에서 다루는 측면들을 언급합니다." |
| |
| #: src/error/result/result_map.md:3 |
| msgid "" |
| "Panicking in the previous example's `multiply` does not make for robust " |
| "code. Generally, we want to return the error to the caller so it can decide " |
| "what is the right way to respond to errors." |
| msgstr "" |
| "이전 예제의 `multiply`에서 패닉을 일으키는 것은 견고한 코드가 아닙니다. 일반" |
| "적으로 우리는 호출자가 에러에 대응하는 올바른 방법을 결정할 수 있도록 에러를 " |
| "호출자에게 반환하기를 원합니다." |
| |
| #: src/error/result/result_map.md:7 |
| msgid "" |
| "We first need to know what kind of error type we are dealing with. To " |
| "determine the `Err` type, we look to [`parse()`](https://doc.rust-lang.org/" |
| "std/primitive.str.html#method.parse), which is implemented with the " |
| "[`FromStr`](https://doc.rust-lang.org/std/str/trait.FromStr.html) trait for " |
| "[`i32`](https://doc.rust-lang.org/std/primitive.i32.html). As a result, the " |
| "`Err` type is specified as [`ParseIntError`](https://doc.rust-lang.org/std/" |
| "num/struct.ParseIntError.html)." |
| msgstr "" |
| "먼저 우리가 어떤 종류의 에러 타입을 다루고 있는지 알아야 합니다. `Err` 타입" |
| "을 결정하기 위해, [`i32`](https://doc.rust-lang.org/std/primitive.i32.html)" |
| "에 대해 [`FromStr`](https://doc.rust-lang.org/std/str/trait.FromStr.html) 트" |
| "레이트로 구현된 [`parse()`](https://doc.rust-lang.org/std/" |
| "primitive.str.html#method.parse)를 살펴봅니다. 그 결과, `Err` 타입은 " |
| "[`ParseIntError`](https://doc.rust-lang.org/std/num/" |
| "struct.ParseIntError.html)로 지정됩니다." |
| |
| #: src/error/result/result_map.md:12 |
| msgid "" |
| "In the example below, the straightforward `match` statement leads to code " |
| "that is overall more cumbersome." |
| msgstr "" |
| "아래 예제에서, 단순한 `match` 문은 전체적으로 더 번거로운 코드로 이어집니다." |
| |
| #: src/error/result/result_map.md:17 |
| msgid "" |
| "// With the return type rewritten, we use pattern matching without " |
| "`unwrap()`.\n" |
| msgstr "" |
| "// 반환 타입을 다시 작성했으므로, `unwrap()` 없이 패턴 매칭을 사용합니다.\n" |
| |
| #: src/error/result/result_map.md:35 src/error/result/result_map.md:68 |
| #: src/error/result/result_alias.md:30 src/error/result/early_returns.md:30 |
| #: src/error/result/enter_question_mark.md:28 |
| #: src/error/result/enter_question_mark.md:61 |
| msgid "\"n is {}\"" |
| msgstr "\"n은 {}입니다\"" |
| |
| #: src/error/result/result_map.md:36 src/error/result/result_map.md:69 |
| #: src/error/result/result_alias.md:31 src/error/result/early_returns.md:31 |
| #: src/error/result/enter_question_mark.md:29 |
| #: src/error/result/enter_question_mark.md:62 |
| #: src/error/multiple_error_types/define_error_type.md:55 |
| #: src/error/multiple_error_types/boxing_errors.md:42 |
| #: src/error/multiple_error_types/reenter_question_mark.md:54 |
| #: src/error/multiple_error_types/wrap_error.md:68 |
| msgid "\"Error: {}\"" |
| msgstr "\"에러: {}\"" |
| |
| #: src/error/result/result_map.md:41 src/error/result/result_map.md:74 |
| msgid "// This still presents a reasonable answer.\n" |
| msgstr "// 이는 여전히 합리적인 답을 제시합니다.\n" |
| |
| #: src/error/result/result_map.md:45 src/error/result/result_map.md:78 |
| msgid "// The following now provides a much more helpful error message.\n" |
| msgstr "// 다음은 이제 훨씬 더 도움이 되는 에러 메시지를 제공합니다.\n" |
| |
| #: src/error/result/result_map.md:51 |
| msgid "" |
| "Luckily, `Option`'s `map`, `and_then`, and many other combinators are also " |
| "implemented for `Result`. [`Result`](https://doc.rust-lang.org/std/result/" |
| "enum.Result.html) contains a complete listing." |
| msgstr "" |
| "다행히도 `Option`의 `map`, `and_then` 및 다른 많은 콤비네이터들이 `Result`에 " |
| "대해서도 구현되어 있습니다. [`Result`](https://doc.rust-lang.org/std/result/" |
| "enum.Result.html) 문서에 전체 목록이 나와 있습니다." |
| |
| #: src/error/result/result_map.md:56 |
| msgid "" |
| "// As with `Option`, we can use combinators such as `map()`.\n" |
| "// This function is otherwise identical to the one above and reads:\n" |
| "// Multiply if both values can be parsed from str, otherwise pass on the " |
| "error.\n" |
| msgstr "" |
| "// `Option`과 마찬가지로 `map()`과 같은 콤비네이터를 사용할 수 있습니다.\n" |
| "// 이 함수는 위와 동일하며 다음과 같이 읽힙니다:\n" |
| "// 두 값 모두 문자열에서 파싱될 수 있으면 곱하고, 그렇지 않으면 에러를 넘깁니" |
| "다.\n" |
| |
| #: src/error/result/result_alias.md:3 |
| msgid "" |
| "How about when we want to reuse a specific `Result` type many times? Recall " |
| "that Rust allows us to create [aliases](../../types/alias.md). Conveniently, " |
| "we can define one for the specific `Result` in question." |
| msgstr "" |
| "특정한 `Result` 타입을 여러 번 재사용하고 싶을 때는 어떨까요? Rust는 [별칭" |
| "(aliases)](../../types/alias.md)을 만들 수 있게 해준다는 점을 기억하세요. 편" |
| "리하게도 문제의 특정 `Result`에 대해 별칭을 정의할 수 있습니다." |
| |
| #: src/error/result/result_alias.md:7 |
| msgid "" |
| "At a module level, creating aliases can be particularly helpful. Errors " |
| "found in a specific module often have the same `Err` type, so a single alias " |
| "can succinctly define _all_ associated `Results`. This is so useful that the " |
| "`std` library even supplies one: [`io::Result`](https://doc.rust-lang.org/" |
| "std/io/type.Result.html)!" |
| msgstr "" |
| "모듈 수준에서 별칭을 만드는 것은 특히 유용할 수 있습니다. 특정 모듈에서 발견" |
| "되는 에러들은 종종 동일한 `Err` 타입을 가지므로, 단일 별칭으로 모든 연관된 " |
| "`Result`들을 간결하게 정의할 수 있습니다. 이는 매우 유용하여 표준 라이브러리" |
| "에서도 하나를 제공합니다: [`io::Result`](https://doc.rust-lang.org/std/io/" |
| "type.Result.html)!" |
| |
| #: src/error/result/result_alias.md:12 |
| msgid "Here's a quick example to show off the syntax:" |
| msgstr "다음은 문법을 보여주는 간단한 예제입니다:" |
| |
| #: src/error/result/result_alias.md:16 |
| msgid "" |
| "// Define a generic alias for a `Result` with the error type " |
| "`ParseIntError`.\n" |
| msgstr "" |
| "// 에러 타입이 `ParseIntError`인 `Result`에 대한 제네릭 별칭을 정의합니다.\n" |
| |
| #: src/error/result/result_alias.md:19 |
| msgid "// Use the above alias to refer to our specific `Result` type.\n" |
| msgstr "// 위 별칭을 사용하여 우리의 특정한 `Result` 타입을 참조합니다.\n" |
| |
| #: src/error/result/result_alias.md:26 |
| msgid "// Here, the alias again allows us to save some space.\n" |
| msgstr "// 여기서도 별칭을 사용하여 공간을 절약할 수 있습니다.\n" |
| |
| #: src/error/result/result_alias.md:43 |
| msgid "[`io::Result`](https://doc.rust-lang.org/std/io/type.Result.html)" |
| msgstr "[`io::Result`](https://doc.rust-lang.org/std/io/type.Result.html)" |
| |
| #: src/error/result/early_returns.md:3 |
| msgid "" |
| "In the previous example, we explicitly handled the errors using combinators. " |
| "Another way to deal with this case analysis is to use a combination of " |
| "`match` statements and _early returns_." |
| msgstr "" |
| "이전 예제에서 우리는 콤비네이터를 사용하여 에러를 명시적으로 처리했습니다. 이" |
| "러한 케이스 분석을 처리하는 또 다른 방법은 `match` 문과 *조기 리턴(early " |
| "returns)*을 조합하여 사용하는 것입니다." |
| |
| #: src/error/result/early_returns.md:7 |
| msgid "" |
| "That is, we can simply stop executing the function and return the error if " |
| "one occurs. For some, this form of code can be easier to both read and " |
| "write. Consider this version of the previous example, rewritten using early " |
| "returns:" |
| msgstr "" |
| "즉, 에러가 발생하면 단순히 함수의 실행을 멈추고 에러를 반환할 수 있습니다. 어" |
| "떤 이들에게는 이런 형태의 코드가 읽고 쓰기에 더 쉬울 수 있습니다. 이전 예제" |
| "를 조기 리턴을 사용하여 다시 작성한 버전을 살펴보세요:" |
| |
| #: src/error/result/early_returns.md:41 |
| msgid "" |
| "At this point, we've learned to explicitly handle errors using combinators " |
| "and early returns. While we generally want to avoid panicking, explicitly " |
| "handling all of our errors is cumbersome." |
| msgstr "" |
| "지금까지 우리는 콤비네이터와 조기 리턴을 사용하여 에러를 명시적으로 처리하는 " |
| "방법을 배웠습니다. 일반적으로 패닉은 피하고 싶지만, 모든 에러를 명시적으로 처" |
| "리하는 것은 번거로운 일입니다." |
| |
| #: src/error/result/early_returns.md:45 |
| msgid "" |
| "In the next section, we'll introduce `?` for the cases where we simply need " |
| "to `unwrap` without possibly inducing `panic`." |
| msgstr "" |
| "다음 섹션에서는 `panic`을 일으키지 않고 단순히 `unwrap`이 필요한 경우를 위한 " |
| "`?`를 소개하겠습니다." |
| |
| #: src/error/result/enter_question_mark.md:3 |
| msgid "" |
| "Sometimes we just want the simplicity of `unwrap` without the possibility of " |
| "a `panic`. Until now, `unwrap` has forced us to nest deeper and deeper when " |
| "what we really wanted was to get the variable _out_. This is exactly the " |
| "purpose of `?`." |
| msgstr "" |
| "때로는 `panic`의 가능성 없이 `unwrap`의 단순함만을 원할 때가 있습니다. 지금까" |
| "지 `unwrap`은 우리가 정말 원했던 것이 변수를 꺼내는 것임에도 불구하고 점점 " |
| "더 깊게 중첩하도록 강제해 왔습니다. 이것이 바로 `?`의 목적입니다." |
| |
| #: src/error/result/enter_question_mark.md:7 |
| msgid "Upon finding an `Err`, there are two valid actions to take:" |
| msgstr "`Err`을 발견했을 때 취할 수 있는 유효한 조치는 두 가지입니다:" |
| |
| #: src/error/result/enter_question_mark.md:9 |
| msgid "`panic!` which we already decided to try to avoid if possible" |
| msgstr "가능하다면 피하기로 이미 결정한 `panic!`" |
| |
| #: src/error/result/enter_question_mark.md:10 |
| msgid "`return` because an `Err` means it cannot be handled" |
| msgstr "`Err`은 처리될 수 없음을 의미하므로 `return`" |
| |
| #: src/error/result/enter_question_mark.md:12 |
| msgid "" |
| "`?` is _almost_[^†] exactly equivalent to an `unwrap` which `return`s " |
| "instead of `panic`king on `Err`s. Let's see how we can simplify the earlier " |
| "example that used combinators:" |
| msgstr "" |
| "`?`는 `Err`에 대해 `panic`을 일으키는 대신 `return`하는 `unwrap`과 거의[^†] " |
| "정확히 동일합니다. 콤비네이터를 사용했던 이전 예제를 어떻게 단순화할 수 있는" |
| "지 봅시다:" |
| |
| #: src/error/result/enter_question_mark.md:39 |
| msgid "The `try!` macro" |
| msgstr "`try!` 매크로" |
| |
| #: src/error/result/enter_question_mark.md:41 |
| msgid "" |
| "Before there was `?`, the same functionality was achieved with the `try!` " |
| "macro. The `?` operator is now recommended, but you may still find `try!` " |
| "when looking at older code. The same `multiply` function from the previous " |
| "example would look like this using `try!`:" |
| msgstr "" |
| "`?`가 나오기 전에는 동일한 기능을 `try!` 매크로로 구현했습니다. 현재는 `?` 연" |
| "산자가 권장되지만, 오래된 코드를 볼 때 여전히 `try!`를 발견할 수도 있습니다. " |
| "이전 예제의 동일한 `multiply` 함수는 `try!`를 사용하면 다음과 같습니다:" |
| |
| #: src/error/result/enter_question_mark.md:47 |
| msgid "" |
| "// To compile and run this example without errors, while using Cargo, change " |
| "the value\n" |
| "// of the `edition` field, in the `[package]` section of the `Cargo.toml` " |
| "file, to \"2015\".\n" |
| msgstr "" |
| "// Cargo를 사용하면서 이 예제를 에러 없이 컴파일하고 실행하려면,\n" |
| "// `Cargo.toml` 파일의 `[package]` 섹션에 있는 `edition` 필드 값을 " |
| "\"2015\"로 변경하세요.\n" |
| |
| #: src/error/result/enter_question_mark.md:72 |
| msgid "" |
| "See [re-enter ?](../multiple_error_types/reenter_question_mark.md) for more " |
| "details." |
| msgstr "" |
| "자세한 내용은 [? 다시 보기](../multiple_error_types/reenter_question_mark.md)" |
| "를 참조하세요." |
| |
| #: src/error/multiple_error_types.md:3 |
| msgid "" |
| "The previous examples have always been very convenient; `Result`s interact " |
| "with other `Result`s and `Option`s interact with other `Option`s." |
| msgstr "" |
| "이전 예제들은 항상 매우 편리했습니다. `Result`는 다른 `Result`와 상호작용하" |
| "고, `Option`은 다른 `Option`과 상호작용했습니다." |
| |
| #: src/error/multiple_error_types.md:6 |
| msgid "" |
| "Sometimes an `Option` needs to interact with a `Result`, or a `Result<T, " |
| "Error1>` needs to interact with a `Result<T, Error2>`. In those cases, we " |
| "want to manage our different error types in a way that makes them composable " |
| "and easy to interact with." |
| msgstr "" |
| "때때로는 `Option`이 `Result`와 상호작용해야 하거나, `Result<T, Error1>`이 " |
| "`Result<T, Error2>`와 상호작용해야 할 때가 있습니다. 그런 경우, 우리는 서로 " |
| "다른 에러 타입들을 구성 가능하고 상호작용하기 쉬운 방식으로 관리하고 싶어 합" |
| "니다." |
| |
| #: src/error/multiple_error_types.md:11 |
| msgid "" |
| "In the following code, two instances of `unwrap` generate different error " |
| "types. `Vec::first` returns an `Option`, while `parse::<i32>` returns a " |
| "`Result<i32, ParseIntError>`:" |
| msgstr "" |
| "다음 코드에서, 두 개의 `unwrap` 인스턴스는 서로 다른 에러 타입을 생성합니다. " |
| "`Vec::first`는 `Option`을 반환하는 반면, `parse::<i32>`는 `Result<i32, " |
| "ParseIntError>`를 반환합니다:" |
| |
| #: src/error/multiple_error_types.md:17 |
| msgid "// Generate error 1\n" |
| msgstr "// 에러 1 발생\n" |
| |
| #: src/error/multiple_error_types.md:18 |
| msgid "// Generate error 2\n" |
| msgstr "// 에러 2 발생\n" |
| |
| #: src/error/multiple_error_types.md:22 |
| #: src/error/multiple_error_types/option_result.md:16 |
| #: src/error/multiple_error_types/option_result.md:45 |
| #: src/error/multiple_error_types/define_error_type.md:60 |
| #: src/error/multiple_error_types/boxing_errors.md:47 |
| #: src/error/multiple_error_types/reenter_question_mark.md:59 |
| #: src/error/multiple_error_types/wrap_error.md:77 src/error/iter_result.md:40 |
| msgid "\"42\"" |
| msgstr "\"42\"" |
| |
| #: src/error/multiple_error_types.md:22 src/error/multiple_error_types.md:24 |
| #: src/error/multiple_error_types/option_result.md:16 |
| #: src/error/multiple_error_types/option_result.md:18 |
| #: src/error/multiple_error_types/option_result.md:45 |
| #: src/error/multiple_error_types/option_result.md:47 |
| #: src/error/multiple_error_types/define_error_type.md:60 |
| #: src/error/multiple_error_types/define_error_type.md:62 |
| #: src/error/multiple_error_types/boxing_errors.md:47 |
| #: src/error/multiple_error_types/boxing_errors.md:49 |
| #: src/error/multiple_error_types/reenter_question_mark.md:59 |
| #: src/error/multiple_error_types/reenter_question_mark.md:61 |
| #: src/error/multiple_error_types/wrap_error.md:77 |
| #: src/error/multiple_error_types/wrap_error.md:79 src/error/iter_result.md:7 |
| #: src/error/iter_result.md:24 src/error/iter_result.md:40 |
| #: src/error/iter_result.md:60 src/error/iter_result.md:75 |
| #: src/error/iter_result.md:90 |
| msgid "\"93\"" |
| msgstr "\"93\"" |
| |
| #: src/error/multiple_error_types.md:22 src/error/multiple_error_types.md:24 |
| #: src/error/multiple_error_types/option_result.md:16 |
| #: src/error/multiple_error_types/option_result.md:18 |
| #: src/error/multiple_error_types/option_result.md:45 |
| #: src/error/multiple_error_types/option_result.md:47 |
| #: src/error/multiple_error_types/define_error_type.md:60 |
| #: src/error/multiple_error_types/define_error_type.md:62 |
| #: src/error/multiple_error_types/boxing_errors.md:47 |
| #: src/error/multiple_error_types/boxing_errors.md:49 |
| #: src/error/multiple_error_types/reenter_question_mark.md:59 |
| #: src/error/multiple_error_types/reenter_question_mark.md:61 |
| #: src/error/multiple_error_types/wrap_error.md:77 |
| #: src/error/multiple_error_types/wrap_error.md:79 src/error/iter_result.md:7 |
| #: src/error/iter_result.md:24 src/error/iter_result.md:40 |
| #: src/error/iter_result.md:60 src/error/iter_result.md:75 |
| #: src/error/iter_result.md:90 |
| msgid "\"18\"" |
| msgstr "\"18\"" |
| |
| #: src/error/multiple_error_types.md:24 |
| #: src/error/multiple_error_types/option_result.md:18 |
| #: src/error/multiple_error_types/option_result.md:47 |
| #: src/error/multiple_error_types/define_error_type.md:62 |
| #: src/error/multiple_error_types/boxing_errors.md:49 |
| #: src/error/multiple_error_types/reenter_question_mark.md:61 |
| #: src/error/multiple_error_types/wrap_error.md:79 src/error/iter_result.md:7 |
| #: src/error/iter_result.md:24 src/error/iter_result.md:40 |
| #: src/error/iter_result.md:60 src/error/iter_result.md:75 |
| #: src/error/iter_result.md:90 |
| msgid "\"tofu\"" |
| msgstr "\"두부\"" |
| |
| #: src/error/multiple_error_types.md:26 src/error/multiple_error_types.md:28 |
| #: src/error/multiple_error_types.md:31 |
| #: src/error/multiple_error_types/define_error_type.md:54 |
| #: src/error/multiple_error_types/boxing_errors.md:41 |
| #: src/error/multiple_error_types/reenter_question_mark.md:53 |
| #: src/error/multiple_error_types/wrap_error.md:66 |
| msgid "\"The first doubled is {}\"" |
| msgstr "\"두 배가 된 첫 번째 값은 {}입니다\"" |
| |
| #: src/error/multiple_error_types.md:29 |
| #: src/error/multiple_error_types/option_result.md:23 |
| msgid "// Error 1: the input vector is empty\n" |
| msgstr "// 에러 1: 입력 벡터가 비어 있습니다\n" |
| |
| #: src/error/multiple_error_types.md:32 |
| #: src/error/multiple_error_types/option_result.md:26 |
| msgid "// Error 2: the element doesn't parse to a number\n" |
| msgstr "// 에러 2: 요소를 숫자로 파싱할 수 없습니다\n" |
| |
| #: src/error/multiple_error_types.md:36 |
| msgid "" |
| "Over the next sections, we'll see several strategies for handling these kind " |
| "of problems." |
| msgstr "" |
| "다음 섹션들에서 이러한 종류의 문제들을 처리하기 위한 몇 가지 전략을 살펴볼 것" |
| "입니다." |
| |
| #: src/error/multiple_error_types/option_result.md:3 |
| msgid "" |
| "The most basic way of handling mixed error types is to just embed them in " |
| "each other." |
| msgstr "" |
| "혼합된 에러 타입들을 처리하는 가장 기본적인 방법은 단순히 서로를 내포시키는 " |
| "것입니다." |
| |
| #: src/error/multiple_error_types/option_result.md:20 |
| #: src/error/multiple_error_types/option_result.md:22 |
| #: src/error/multiple_error_types/option_result.md:25 |
| #: src/error/multiple_error_types/option_result.md:49 |
| #: src/error/multiple_error_types/option_result.md:50 |
| #: src/error/multiple_error_types/option_result.md:51 |
| msgid "\"The first doubled is {:?}\"" |
| msgstr "\"두 배가 된 첫 번째 값은 {:?}입니다\"" |
| |
| #: src/error/multiple_error_types/option_result.md:30 |
| msgid "" |
| "There are times when we'll want to stop processing on errors (like with [`?`]" |
| "(../result/enter_question_mark.md)) but keep going when the `Option` is " |
| "`None`. The `transpose` function comes in handy to swap the `Result` and " |
| "`Option`." |
| msgstr "" |
| "에러가 발생하면 처리를 중단하고 싶지만([?](../result/enter_question_mark.md)" |
| "와 같이), `Option`이 `None`일 때는 계속 진행하고 싶을 때가 있습니다. 이럴 때 " |
| "`Result`와 `Option`을 서로 바꾸어 주는 `transpose` 함수가 유용합니다." |
| |
| #: src/error/multiple_error_types/define_error_type.md:3 |
| msgid "" |
| "Sometimes it simplifies the code to mask all of the different errors with a " |
| "single type of error. We'll show this with a custom error." |
| msgstr "" |
| "때로는 모든 서로 다른 에러들을 하나의 에러 타입으로 마스킹하는 것이 코드를 단" |
| "순화합니다. 이를 커스텀 에러를 통해 보여주겠습니다." |
| |
| #: src/error/multiple_error_types/define_error_type.md:6 |
| msgid "" |
| "Rust allows us to define our own error types. In general, a \"good\" error " |
| "type:" |
| msgstr "" |
| "Rust에서는 우리만의 에러 타입을 정의할 수 있습니다. 일반적으로 \"좋은\" 에러 " |
| "타입은 다음과 같습니다:" |
| |
| #: src/error/multiple_error_types/define_error_type.md:8 |
| msgid "Represents different errors with the same type" |
| msgstr "서로 다른 에러들을 동일한 타입으로 표현합니다" |
| |
| #: src/error/multiple_error_types/define_error_type.md:9 |
| msgid "Presents nice error messages to the user" |
| msgstr "사용자에게 보기 좋은 에러 메시지를 제공합니다" |
| |
| #: src/error/multiple_error_types/define_error_type.md:10 |
| msgid "Is easy to compare with other types" |
| msgstr "다른 타입들과 비교하기 쉽습니다" |
| |
| #: src/error/multiple_error_types/define_error_type.md:11 |
| msgid "Good: `Err(EmptyVec)`" |
| msgstr "좋은 예: `Err(EmptyVec)`" |
| |
| #: src/error/multiple_error_types/define_error_type.md:12 |
| msgid "" |
| "Bad: `Err(\"Please use a vector with at least one element\".to_owned())`" |
| msgstr "" |
| "나쁜 예: `Err(\"Please use a vector with at least one element\".to_owned())`" |
| |
| #: src/error/multiple_error_types/define_error_type.md:13 |
| msgid "Can hold information about the error" |
| msgstr "에러에 대한 정보를 담을 수 있습니다" |
| |
| #: src/error/multiple_error_types/define_error_type.md:14 |
| msgid "Good: `Err(BadChar(c, position))`" |
| msgstr "좋은 예: `Err(BadChar(c, position))`" |
| |
| #: src/error/multiple_error_types/define_error_type.md:15 |
| msgid "Bad: `Err(\"+ cannot be used here\".to_owned())`" |
| msgstr "나쁜 예: `Err(\"+ cannot be used here\".to_owned())`" |
| |
| #: src/error/multiple_error_types/define_error_type.md:16 |
| msgid "Composes well with other errors" |
| msgstr "다른 에러들과 잘 구성(compose)됩니다" |
| |
| #: src/error/multiple_error_types/define_error_type.md:22 |
| msgid "" |
| "// Define our error types. These may be customized for our error handling " |
| "cases.\n" |
| "// Now we will be able to write our own errors, defer to an underlying " |
| "error\n" |
| "// implementation, or do something in between.\n" |
| msgstr "" |
| "// 우리의 에러 타입들을 정의합니다. 이들은 우리의 에러 처리 케이스에 맞게 커" |
| "스터마이징될 수 있습니다.\n" |
| "// 이제 우리만의 에러를 작성하거나, 기저 에러 구현에 위임하거나, 혹은 그 사이" |
| "의 작업을 수행할 수 있습니다.\n" |
| |
| #: src/error/multiple_error_types/define_error_type.md:28 |
| msgid "" |
| "// Generation of an error is completely separate from how it is displayed.\n" |
| "// There's no need to be concerned about cluttering complex logic with the " |
| "display style.\n" |
| "//\n" |
| "// Note that we don't store any extra info about the errors. This means we " |
| "can't state\n" |
| "// which string failed to parse without modifying our types to carry that " |
| "information.\n" |
| msgstr "" |
| "// 에러의 생성은 표시 방식과 완전히 분리되어 있습니다.\n" |
| "// 표시 스타일 때문에 복잡한 로직이 어지러워질까 봐 걱정할 필요가 없습니다.\n" |
| "//\n" |
| "// 참고로 우리는 에러에 대한 추가 정보를 저장하지 않습니다. 즉, 정보를 담도" |
| "록 타입을 수정하지 않고서는\n" |
| "// 어떤 문자열이 파싱에 실패했는지 알 수 없습니다.\n" |
| |
| #: src/error/multiple_error_types/define_error_type.md:36 |
| #: src/error/multiple_error_types/boxing_errors.md:23 |
| #: src/error/multiple_error_types/reenter_question_mark.md:37 |
| msgid "\"invalid first item to double\"" |
| msgstr "\"두 배로 만들 첫 번째 항목이 유효하지 않습니다\"" |
| |
| #: src/error/multiple_error_types/define_error_type.md:42 |
| msgid "// Change the error to our new type.\n" |
| msgstr "// 에러를 우리의 새로운 타입으로 변경합니다.\n" |
| |
| #: src/error/multiple_error_types/define_error_type.md:46 |
| msgid "// Update to the new error type here also.\n" |
| msgstr "// 여기서도 새로운 에러 타입으로 업데이트합니다.\n" |
| |
| #: src/error/multiple_error_types/boxing_errors.md:3 |
| msgid "" |
| "A way to write simple code while preserving the original errors is to [`Box`]" |
| "(https://doc.rust-lang.org/std/boxed/struct.Box.html) them. The drawback is " |
| "that the underlying error type is only known at runtime and not [statically " |
| "determined](https://doc.rust-lang.org/book/ch17-02-trait-objects.html#trait-" |
| "objects-perform-dynamic-dispatch)." |
| msgstr "" |
| "원본 에러를 보존하면서 단순한 코드를 작성하는 방법은 에러들을 [`Box`]" |
| "(https://doc.rust-lang.org/std/boxed/struct.Box.html)하는 것입니다. 단점은 기" |
| "저 에러 타입을 런타임에만 알 수 있고 [정적으로 결정](https://doc.rust-" |
| "lang.org/book/ch17-02-trait-objects.html#trait-objects-perform-dynamic-" |
| "dispatch)되지 않는다는 것입니다." |
| |
| #: src/error/multiple_error_types/boxing_errors.md:7 |
| msgid "" |
| "The stdlib helps in boxing our errors by having `Box` implement conversion " |
| "from any type that implements the `Error` trait into the trait object " |
| "`Box<Error>`, via [`From`](https://doc.rust-lang.org/std/convert/" |
| "trait.From.html)." |
| msgstr "" |
| "표준 라이브러리는 `Box`가 [`From`](https://doc.rust-lang.org/std/convert/" |
| "trait.From.html)을 통해 `Error` 트레이트를 구현하는 모든 타입으로부터 트레이" |
| "트 객체 `Box<Error>`로의 변환을 구현하도록 함으로써 에러를 박싱하는 것을 돕습" |
| "니다." |
| |
| #: src/error/multiple_error_types/boxing_errors.md:14 |
| #: src/error/multiple_error_types/reenter_question_mark.md:28 |
| msgid "// Change the alias to use `Box<dyn error::Error>`.\n" |
| msgstr "// 별칭이 `Box<dyn error::Error>`를 사용하도록 변경합니다.\n" |
| |
| #: src/error/multiple_error_types/boxing_errors.md:31 |
| msgid "// Converts to Box using Into trait.\n" |
| msgstr "// Into 트레이트를 사용하여 Box로 변환합니다.\n" |
| |
| #: src/error/multiple_error_types/boxing_errors.md:34 |
| msgid "// Converts to Box using From::from fn pointer.\n" |
| msgstr "// From::from 함수 포인터를 사용하여 Box로 변환합니다.\n" |
| |
| #: src/error/multiple_error_types/boxing_errors.md:59 |
| msgid "" |
| "[Dynamic dispatch](https://doc.rust-lang.org/book/ch17-02-trait-" |
| "objects.html#trait-objects-perform-dynamic-dispatch) and [`Error` trait]" |
| "(https://doc.rust-lang.org/std/error/trait.Error.html)" |
| msgstr "" |
| "[동적 디스패치(Dynamic dispatch)](https://doc.rust-lang.org/book/ch17-02-" |
| "trait-objects.html#trait-objects-perform-dynamic-dispatch)와 [`Error` 트레이" |
| "트](https://doc.rust-lang.org/std/error/trait.Error.html)" |
| |
| #: src/error/multiple_error_types/reenter_question_mark.md:3 |
| msgid "" |
| "Notice in the previous example that our immediate reaction to calling " |
| "`parse` is to `map` the error from a library error into a boxed error:" |
| msgstr "" |
| "이전 예제에서 `parse`를 호출했을 때 우리의 즉각적인 반응은 라이브러리 에러를 " |
| "박싱된 에러로 `map`하는 것이었습니다:" |
| |
| #: src/error/multiple_error_types/reenter_question_mark.md:12 |
| msgid "" |
| "Since this is a simple and common operation, it would be convenient if it " |
| "could be elided. Alas, because `and_then` is not sufficiently flexible, it " |
| "cannot. However, we can instead use `?`." |
| msgstr "" |
| "이는 단순하고 흔한 작업이므로 생략할 수 있다면 편리할 것입니다. 아쉽게도 " |
| "`and_then`은 충분히 유연하지 못해 생략할 수 없습니다. 하지만 대신 `?`를 사용" |
| "할 수 있습니다." |
| |
| #: src/error/multiple_error_types/reenter_question_mark.md:16 |
| msgid "" |
| "`?` was previously explained as either `unwrap` or `return Err(err)`. This " |
| "is only mostly true. It actually means `unwrap` or `return " |
| "Err(From::from(err))`. Since `From::from` is a conversion utility between " |
| "different types, this means that if you `?` where the error is convertible " |
| "to the return type, it will convert automatically." |
| msgstr "" |
| "`?`는 이전에 `unwrap` 또는 `return Err(err)`로 설명되었습니다. 이는 거의 맞지" |
| "만 전부는 아닙니다. 실제로는 `unwrap` 또는 `return Err(From::from(err))`를 의" |
| "미합니다. `From::from`은 서로 다른 타입 간의 변환 유틸리티이므로, 에러가 반" |
| "환 타입으로 변환 가능한 곳에서 `?`를 사용하면 자동으로 변환됩니다." |
| |
| #: src/error/multiple_error_types/reenter_question_mark.md:22 |
| msgid "" |
| "Here, we rewrite the previous example using `?`. As a result, the `map_err` " |
| "will go away when `From::from` is implemented for our error type:" |
| msgstr "" |
| "여기서는 이전 예제를 `?`를 사용하여 다시 작성합니다. 결과적으로, 우리의 에러 " |
| "타입에 대해 `From::from`이 구현되면 `map_err`이 사라질 것입니다:" |
| |
| #: src/error/multiple_error_types/reenter_question_mark.md:42 |
| msgid "" |
| "// The same structure as before but rather than chain all `Results`\n" |
| "// and `Options` along, we `?` to get the inner value out immediately.\n" |
| msgstr "" |
| "// 이전과 동일한 구조이지만 모든 `Result`와 `Option`을 체인으로 연결하는 대" |
| "신,\n" |
| "// `?`를 사용하여 즉시 내부 값을 꺼냅니다.\n" |
| |
| #: src/error/multiple_error_types/reenter_question_mark.md:69 |
| msgid "" |
| "This is actually fairly clean now. Compared with the original `panic`, it is " |
| "very similar to replacing the `unwrap` calls with `?` except that the return " |
| "types are `Result`. As a result, they must be destructured at the top level." |
| msgstr "" |
| "이제 상당히 깔끔해졌습니다. 원본 `panic` 예제와 비교하면, 반환 타입이 " |
| "`Result`라는 점을 제외하고는 `unwrap` 호출을 `?`로 대체한 것과 매우 유사합니" |
| "다. 그 결과, 이들은 최상위 레벨에서 구조 분해(destructure)되어야 합니다." |
| |
| #: src/error/multiple_error_types/reenter_question_mark.md:76 |
| msgid "" |
| "[`From::from`](https://doc.rust-lang.org/std/convert/trait.From.html) and [`?" |
| "`](https://doc.rust-lang.org/reference/expressions/operator-expr.html#the-" |
| "question-mark-operator)" |
| msgstr "" |
| "[`From::from`](https://doc.rust-lang.org/std/convert/trait.From.html)과 [`?`]" |
| "(https://doc.rust-lang.org/reference/expressions/operator-expr.html#the-" |
| "question-mark-operator)" |
| |
| #: src/error/multiple_error_types/wrap_error.md:3 |
| msgid "An alternative to boxing errors is to wrap them in your own error type." |
| msgstr "" |
| "에러를 박싱하는 것의 대안은 에러를 여러분만의 에러 타입으로 감싸는 것입니다." |
| |
| #: src/error/multiple_error_types/wrap_error.md:16 |
| msgid "" |
| "// We will defer to the parse error implementation for their error.\n" |
| " // Supplying extra info requires adding more data to the type.\n" |
| msgstr "" |
| "// 파싱 에러에 대해서는 해당 에러 구현에 위임할 것입니다.\n" |
| "// 추가 정보를 제공하려면 타입에 더 많은 데이터를 추가해야 합니다.\n" |
| |
| #: src/error/multiple_error_types/wrap_error.md:25 |
| msgid "\"please use a vector with at least one element\"" |
| msgstr "\"최소한 하나의 요소를 가진 벡터를 사용하세요\"" |
| |
| #: src/error/multiple_error_types/wrap_error.md:26 |
| msgid "" |
| "// The wrapped error contains additional information and is available\n" |
| " // via the source() method.\n" |
| msgstr "" |
| "// 감싸진 에러는 추가 정보를 포함하며 `source()` 메서드를 통해\n" |
| "// 사용할 수 있습니다.\n" |
| |
| #: src/error/multiple_error_types/wrap_error.md:29 |
| msgid "\"the provided string could not be parsed as int\"" |
| msgstr "\"제공된 문자열을 정수로 파싱할 수 없습니다\"" |
| |
| #: src/error/multiple_error_types/wrap_error.md:38 |
| msgid "" |
| "// The cause is the underlying implementation error type. Is implicitly\n" |
| " // cast to the trait object `&error::Error`. This works because " |
| "the\n" |
| " // underlying type already implements the `Error` trait.\n" |
| msgstr "" |
| "// 원인은 기저 구현 에러 타입입니다. 이는 트레이트 객체 `&error::Error`로\n" |
| "// 암시적으로 캐스팅됩니다. 기저 타입이 이미 `Error` 트레이트를\n" |
| "// 구현하고 있기 때문에 작동합니다.\n" |
| |
| #: src/error/multiple_error_types/wrap_error.md:45 |
| msgid "" |
| "// Implement the conversion from `ParseIntError` to `DoubleError`.\n" |
| "// This will be automatically called by `?` if a `ParseIntError`\n" |
| "// needs to be converted into a `DoubleError`.\n" |
| msgstr "" |
| "// `ParseIntError`에서 `DoubleError`로의 변환을 구현합니다.\n" |
| "// `ParseIntError`를 `DoubleError`로 변환해야 할 때 `?`에 의해\n" |
| "// 자동으로 호출됩니다.\n" |
| |
| #: src/error/multiple_error_types/wrap_error.md:57 |
| msgid "" |
| "// Here we implicitly use the `ParseIntError` implementation of `From` " |
| "(which\n" |
| " // we defined above) in order to create a `DoubleError`.\n" |
| msgstr "" |
| "// 여기서 우리는 `DoubleError`를 생성하기 위해 (위에서 정의한)\n" |
| "// `From`의 `ParseIntError` 구현을 암시적으로 사용합니다.\n" |
| |
| #: src/error/multiple_error_types/wrap_error.md:70 |
| msgid "\" Caused by: {}\"" |
| msgstr "\" 원인: {}\"" |
| |
| #: src/error/multiple_error_types/wrap_error.md:87 |
| msgid "" |
| "This adds a bit more boilerplate for handling errors and might not be needed " |
| "in all applications. There are some libraries that can take care of the " |
| "boilerplate for you." |
| msgstr "" |
| "이는 에러 처리를 위해 상용구(boilerplate) 코드를 조금 더 추가하며, 모든 애플" |
| "리케이션에서 필요하지는 않을 수 있습니다. 상용구 코드를 대신 처리해 주는 몇" |
| "몇 라이브러리들이 있습니다." |
| |
| #: src/error/multiple_error_types/wrap_error.md:93 |
| msgid "" |
| "[`From::from`](https://doc.rust-lang.org/std/convert/trait.From.html) and " |
| "[`Enums`](../../custom_types/enum.md)" |
| msgstr "" |
| "[`From::from`](https://doc.rust-lang.org/std/convert/trait.From.html)과 [열거" |
| "형(Enums)](../../custom_types/enum.md)" |
| |
| #: src/error/multiple_error_types/wrap_error.md:95 |
| msgid "" |
| "[`Crates for handling errors`](https://crates.io/keywords/error-handling)" |
| msgstr "" |
| "[에러 처리를 위한 크레이트들](https://crates.io/keywords/error-handling)" |
| |
| #: src/error/iter_result.md:3 |
| msgid "An `Iter::map` operation might fail, for example:" |
| msgstr "예를 들어, `Iter::map` 연산은 실패할 수 있습니다:" |
| |
| #: src/error/iter_result.md:12 src/error/iter_result.md:29 |
| #: src/error/iter_result.md:65 |
| msgid "\"Results: {:?}\"" |
| msgstr "\"결과: {:?}\"" |
| |
| #: src/error/iter_result.md:16 |
| msgid "Let's step through strategies for handling this." |
| msgstr "이를 처리하기 위한 전략들을 단계별로 살펴봅시다." |
| |
| #: src/error/iter_result.md:18 |
| msgid "Ignore the failed items with `filter_map()`" |
| msgstr "`filter_map()`으로 실패한 항목 무시하기" |
| |
| #: src/error/iter_result.md:20 |
| msgid "" |
| "`filter_map` calls a function and filters out the results that are `None`." |
| msgstr "`filter_map`은 함수를 호출하고 그 결과가 `None`인 것들을 걸러냅니다." |
| |
| #: src/error/iter_result.md:33 |
| msgid "Collect the failed items with `map_err()` and `filter_map()`" |
| msgstr "`map_err()`와 `filter_map()`으로 실패한 항목 수집하기" |
| |
| #: src/error/iter_result.md:35 |
| msgid "" |
| "`map_err` calls a function with the error, so by adding that to the previous " |
| "`filter_map` solution we can save them off to the side while iterating." |
| msgstr "" |
| "`map_err`은 에러와 함께 함수를 호출하므로, 이를 이전의 `filter_map` 방식에 추" |
| "가하여 순회하는 동안 에러들을 따로 저장해둘 수 있습니다." |
| |
| #: src/error/iter_result.md:40 |
| msgid "\"999\"" |
| msgstr "\"999\"" |
| |
| #: src/error/iter_result.md:47 src/error/iter_result.md:80 |
| #: src/error/iter_result.md:97 |
| msgid "\"Numbers: {:?}\"" |
| msgstr "\"숫자: {:?}\"" |
| |
| #: src/error/iter_result.md:48 src/error/iter_result.md:81 |
| #: src/error/iter_result.md:98 |
| msgid "\"Errors: {:?}\"" |
| msgstr "\"에러: {:?}\"" |
| |
| #: src/error/iter_result.md:52 |
| msgid "Fail the entire operation with `collect()`" |
| msgstr "`collect()`를 사용하여 전체 연산을 실패로 처리하기" |
| |
| #: src/error/iter_result.md:54 |
| msgid "" |
| "`Result` implements `FromIterator` so that a vector of results " |
| "(`Vec<Result<T, E>>`) can be turned into a result with a vector " |
| "(`Result<Vec<T>, E>`). Once an `Result::Err` is found, the iteration will " |
| "terminate." |
| msgstr "" |
| "`Result`는 `FromIterator`를 구현하므로 결과들의 벡터(`Vec<Result<T, E>>`)를 " |
| "벡터를 가진 결과(`Result<Vec<T>, E>`)로 바꿀 수 있습니다. `Result::Err`이 발" |
| "견되면 즉시 순회가 종료됩니다." |
| |
| #: src/error/iter_result.md:69 |
| msgid "This same technique can be used with `Option`." |
| msgstr "동일한 기술을 `Option`에 대해서도 사용할 수 있습니다." |
| |
| #: src/error/iter_result.md:71 |
| msgid "Collect all valid values and failures with `partition()`" |
| msgstr "`partition()`을 사용하여 모든 유효한 값과 실패를 수집하기" |
| |
| #: src/error/iter_result.md:85 |
| msgid "" |
| "When you look at the results, you'll note that everything is still wrapped " |
| "in `Result`. A little more boilerplate is needed for this." |
| msgstr "" |
| "결과를 보면 모든 것이 여전히 `Result`로 감싸져 있음을 알 수 있습니다. 이를 위" |
| "해서는 상용구 코드가 조금 더 필요합니다." |
| |
| #: src/std.md:3 |
| msgid "" |
| "The `std` library provides many custom types which expands drastically on " |
| "the `primitives`. Some of these include:" |
| msgstr "" |
| "표준 라이브러리는 `기본 자료형`을 대폭 확장한 많은 사용자 정의 타입을 제공합" |
| "니다. 이들 중 일부는 다음과 같습니다:" |
| |
| #: src/std.md:6 |
| msgid "growable `String`s like: `\"hello world\"`" |
| msgstr "가변 크기 `String`: 예: `\"hello world\"`" |
| |
| #: src/std.md:7 |
| msgid "growable vectors: `[1, 2, 3]`" |
| msgstr "가변 크기 벡터: `[1, 2, 3]`" |
| |
| #: src/std.md:8 |
| msgid "optional types: `Option<i32>`" |
| msgstr "선택적 타입: `Option<i32>`" |
| |
| #: src/std.md:9 |
| msgid "error handling types: `Result<i32, i32>`" |
| msgstr "에러 핸들링 타입: `Result<i32, i32>`" |
| |
| #: src/std.md:10 |
| msgid "heap allocated pointers: `Box<i32>`" |
| msgstr "힙 할당 포인터: `Box<i32>`" |
| |
| #: src/std.md:14 src/std_misc.md:14 |
| msgid "" |
| "[primitives](primitives.md) and [the std library](https://doc.rust-lang.org/" |
| "std/)" |
| msgstr "" |
| "[기본 자료형](primitives.md)과 [표준 라이브러리](https://doc.rust-lang.org/" |
| "std/)" |
| |
| #: src/std/box.md:3 |
| msgid "" |
| "All values in Rust are stack allocated by default. Values can be _boxed_ " |
| "(allocated on the heap) by creating a `Box<T>`. A box is a smart pointer to " |
| "a heap allocated value of type `T`. When a box goes out of scope, its " |
| "destructor is called, the inner object is destroyed, and the memory on the " |
| "heap is freed." |
| msgstr "" |
| "Rust의 모든 값은 기본적으로 스택에 할당됩니다. `Box<T>`를 생성함으로써 값을 *" |
| "박싱*(힙에 할당)할 수 있습니다. 박스는 힙에 할당된 `T` 타입 값을 가리키는 스" |
| "마트 포인터입니다. 박스가 스코프를 벗어나면 데스트럭터가 호출되어 내부 객체" |
| "가 파괴되고 힙 메모리가 해제됩니다." |
| |
| #: src/std/box.md:8 |
| msgid "" |
| "Boxed values can be dereferenced using the `*` operator; this removes one " |
| "layer of indirection." |
| msgstr "" |
| "박싱된 값은 `*` 연산자를 사용하여 역참조할 수 있습니다. 이는 한 단계의 간접 " |
| "참조를 제거합니다." |
| |
| #: src/std/box.md:20 |
| msgid "" |
| "// A Rectangle can be specified by where its top left and bottom right\n" |
| "// corners are in space\n" |
| msgstr "" |
| "// 사각형은 공간상에서의 왼쪽 상단과 오른쪽 하단\n" |
| "// 꼭짓점 위치로 지정될 수 있습니다\n" |
| |
| #: src/std/box.md:34 |
| msgid "// Allocate this point on the heap, and return a pointer to it\n" |
| msgstr "// 이 점을 힙에 할당하고, 그에 대한 포인터를 반환합니다\n" |
| |
| #: src/std/box.md:39 |
| msgid "" |
| "// (all the type annotations are superfluous)\n" |
| " // Stack allocated variables\n" |
| msgstr "" |
| "// (모든 타입 어노테이션은 불필요합니다)\n" |
| " // 스택에 할당된 변수들\n" |
| |
| #: src/std/box.md:47 |
| msgid "// Heap allocated rectangle\n" |
| msgstr "// 힙에 할당된 사각형\n" |
| |
| #: src/std/box.md:53 |
| msgid "// The output of functions can be boxed\n" |
| msgstr "// 함수의 출력은 박싱될 수 있습니다\n" |
| |
| #: src/std/box.md:56 |
| msgid "// Double indirection\n" |
| msgstr "// 이중 간접 참조\n" |
| |
| #: src/std/box.md:59 |
| msgid "\"Point occupies {} bytes on the stack\"" |
| msgstr "\"Point는 스택에서 {} 바이트를 차지합니다\"" |
| |
| #: src/std/box.md:61 |
| msgid "\"Rectangle occupies {} bytes on the stack\"" |
| msgstr "\"Rectangle은 스택에서 {} 바이트를 차지합니다\"" |
| |
| #: src/std/box.md:64 |
| msgid "// box size == pointer size\n" |
| msgstr "// 박스 크기 == 포인터 크기\n" |
| |
| #: src/std/box.md:65 |
| msgid "\"Boxed point occupies {} bytes on the stack\"" |
| msgstr "\"박싱된 point는 스택에서 {} 바이트를 차지합니다\"" |
| |
| #: src/std/box.md:67 |
| msgid "\"Boxed rectangle occupies {} bytes on the stack\"" |
| msgstr "\"박싱된 rectangle은 스택에서 {} 바이트를 차지합니다\"" |
| |
| #: src/std/box.md:69 |
| msgid "\"Boxed box occupies {} bytes on the stack\"" |
| msgstr "\"박싱된 박스는 스택에서 {} 바이트를 차지합니다\"" |
| |
| #: src/std/box.md:72 |
| msgid "// Copy the data contained in `boxed_point` into `unboxed_point`\n" |
| msgstr "// `boxed_point`에 담긴 데이터를 `unboxed_point`로 복사합니다\n" |
| |
| #: src/std/box.md:74 |
| msgid "\"Unboxed point occupies {} bytes on the stack\"" |
| msgstr "\"박싱 해제된 point는 스택에서 {} 바이트를 차지합니다\"" |
| |
| #: src/std/vec.md:3 |
| msgid "" |
| "Vectors are re-sizable arrays. Like slices, their size is not known at " |
| "compile time, but they can grow or shrink at any time. A vector is " |
| "represented using 3 parameters:" |
| msgstr "" |
| "벡터는 크기 조절이 가능한 배열입니다. 슬라이스와 마찬가지로 크기를 컴파일 타" |
| "임에 알 수 없지만, 언제든지 늘리거나 줄일 수 있습니다. 벡터는 3개의 파라미터" |
| "로 표현됩니다:" |
| |
| #: src/std/vec.md:7 |
| msgid "pointer to the data" |
| msgstr "데이터에 대한 포인터" |
| |
| #: src/std/vec.md:8 |
| msgid "length" |
| msgstr "길이" |
| |
| #: src/std/vec.md:9 |
| msgid "capacity" |
| msgstr "용량" |
| |
| #: src/std/vec.md:11 |
| msgid "" |
| "The capacity indicates how much memory is reserved for the vector. The " |
| "vector can grow as long as the length is smaller than the capacity. When " |
| "this threshold needs to be surpassed, the vector is reallocated with a " |
| "larger capacity." |
| msgstr "" |
| "용량은 벡터를 위해 예약된 메모리 양을 나타냅니다. 벡터는 길이가 용량보다 작" |
| "은 동안에는 계속 늘어날 수 있습니다. 이 임계값을 넘어야 할 때, 벡터는 더 큰 " |
| "용량으로 재할당됩니다." |
| |
| #: src/std/vec.md:17 |
| msgid "// Iterators can be collected into vectors\n" |
| msgstr "// 이터레이터는 벡터로 수집(collect)될 수 있습니다\n" |
| |
| #: src/std/vec.md:19 |
| msgid "\"Collected (0..10) into: {:?}\"" |
| msgstr "\"(0..10)을 다음으로 수집함: {:?}\"" |
| |
| #: src/std/vec.md:21 |
| msgid "// The `vec!` macro can be used to initialize a vector\n" |
| msgstr "// `vec!` 매크로는 벡터를 초기화하는 데 사용될 수 있습니다\n" |
| |
| #: src/std/vec.md:23 |
| msgid "\"Initial vector: {:?}\"" |
| msgstr "\"초기 벡터: {:?}\"" |
| |
| #: src/std/vec.md:25 |
| msgid "// Insert new element at the end of the vector\n" |
| msgstr "// 벡터 끝에 새로운 요소를 삽입합니다\n" |
| |
| #: src/std/vec.md:26 |
| msgid "\"Push 4 into the vector\"" |
| msgstr "\"벡터에 4를 푸시합니다\"" |
| |
| #: src/std/vec.md:28 |
| msgid "\"Vector: {:?}\"" |
| msgstr "\"벡터: {:?}\"" |
| |
| #: src/std/vec.md:30 |
| msgid "// Error! Immutable vectors can't grow\n" |
| msgstr "// 에러! 불변 벡터는 늘어날 수 없습니다\n" |
| |
| #: src/std/vec.md:34 |
| msgid "" |
| "// The `len` method yields the number of elements currently stored in a " |
| "vector\n" |
| msgstr "// `len` 메서드는 현재 벡터에 저장된 요소의 개수를 반환합니다\n" |
| |
| #: src/std/vec.md:35 |
| msgid "\"Vector length: {}\"" |
| msgstr "\"벡터 길이: {}\"" |
| |
| #: src/std/vec.md:37 |
| msgid "// Indexing is done using the square brackets (indexing starts at 0)\n" |
| msgstr "// 인덱싱은 대괄호를 사용하여 수행됩니다 (인덱싱은 0부터 시작합니다)\n" |
| |
| #: src/std/vec.md:38 |
| msgid "\"Second element: {}\"" |
| msgstr "\"두 번째 요소: {}\"" |
| |
| #: src/std/vec.md:40 |
| msgid "// `pop` removes the last element from the vector and returns it\n" |
| msgstr "// `pop`은 벡터에서 마지막 요소를 제거하고 이를 반환합니다\n" |
| |
| #: src/std/vec.md:41 |
| msgid "\"Pop last element: {:?}\"" |
| msgstr "\"마지막 요소 팝: {:?}\"" |
| |
| #: src/std/vec.md:43 |
| msgid "// Out of bounds indexing yields a panic\n" |
| msgstr "// 범위를 벗어난 인덱싱은 패닉을 일으킵니다\n" |
| |
| #: src/std/vec.md:44 |
| msgid "\"Fourth element: {}\"" |
| msgstr "\"네 번째 요소: {}\"" |
| |
| #: src/std/vec.md:47 |
| msgid "// `Vector`s can be easily iterated over\n" |
| msgstr "// 벡터는 쉽게 순회(iterate)될 수 있습니다\n" |
| |
| #: src/std/vec.md:48 |
| msgid "\"Contents of xs:\"" |
| msgstr "\"xs의 내용:\"" |
| |
| #: src/std/vec.md:53 |
| msgid "" |
| "// A `Vector` can also be iterated over while the iteration\n" |
| " // count is enumerated in a separate variable (`i`)\n" |
| msgstr "" |
| "// 벡터는 반복 횟수가 별도의 변수(`i`)에 열거되면서 순회될 수도 있습니다\n" |
| |
| #: src/std/vec.md:56 |
| msgid "\"In position {} we have value {}\"" |
| msgstr "\"{} 위치에 {} 값이 있습니다\"" |
| |
| #: src/std/vec.md:59 |
| msgid "" |
| "// Thanks to `iter_mut`, mutable `Vector`s can also be iterated\n" |
| " // over in a way that allows modifying each value\n" |
| msgstr "" |
| "// `iter_mut` 덕분에 가변 벡터도 각 값을 수정할 수 있는 방식으로\n" |
| " // 순회될 수 있습니다\n" |
| |
| #: src/std/vec.md:64 |
| msgid "\"Updated vector: {:?}\"" |
| msgstr "\"업데이트된 벡터: {:?}\"" |
| |
| #: src/std/vec.md:68 |
| msgid "" |
| "More `Vec` methods can be found under the [std::vec](https://doc.rust-" |
| "lang.org/std/vec/) module" |
| msgstr "" |
| "더 많은 `Vec` 메서드는 [std::vec](https://doc.rust-lang.org/std/vec/) 모듈에" |
| "서 찾을 수 있습니다" |
| |
| #: src/std/str.md:3 |
| msgid "The two most used string types in Rust are `String` and `&str`." |
| msgstr "" |
| "Rust에서 가장 많이 사용되는 두 가지 문자열 타입은 `String`과 `&str`입니다." |
| |
| #: src/std/str.md:5 |
| msgid "" |
| "A `String` is stored as a vector of bytes (`Vec<u8>`), but guaranteed to " |
| "always be a valid UTF-8 sequence. `String` is heap allocated, growable and " |
| "not null terminated." |
| msgstr "" |
| "`String`은 바이트 벡터(`Vec<u8>`)로 저장되지만, 항상 유효한 UTF-8 시퀀스임이 " |
| "보장됩니다. `String`은 힙에 할당되며, 크기 조절이 가능하고 널 종료(null " |
| "terminated)되지 않습니다." |
| |
| #: src/std/str.md:9 |
| msgid "" |
| "`&str` is a slice (`&[u8]`) that always points to a valid UTF-8 sequence, " |
| "and can be used to view into a `String`, just like `&[T]` is a view into " |
| "`Vec<T>`." |
| msgstr "" |
| "`&str`은 항상 유효한 UTF-8 시퀀스를 가리키는 슬라이스(`&[u8]`)이며, `&[T]`가 " |
| "`Vec<T>`를 들여다보는 창(view)인 것과 마찬가지로 `String`을 들여다보는 데 사" |
| "용될 수 있습니다." |
| |
| #: src/std/str.md:14 |
| msgid "" |
| "// (all the type annotations are superfluous)\n" |
| " // A reference to a string allocated in read only memory\n" |
| msgstr "" |
| "// (모든 타입 어노테이션은 불필요합니다)\n" |
| " // 읽기 전용 메모리에 할당된 문자열에 대한 참조\n" |
| |
| #: src/std/str.md:16 |
| msgid "\"the quick brown fox jumps over the lazy dog\"" |
| msgstr "\"the quick brown fox jumps over the lazy dog\"" |
| |
| #: src/std/str.md:17 |
| msgid "\"Pangram: {}\"" |
| msgstr "\"팬그램(Pangram): {}\"" |
| |
| #: src/std/str.md:19 |
| msgid "// Iterate over words in reverse, no new string is allocated\n" |
| msgstr "// 단어들을 역순으로 순회합니다. 새로운 문자열은 할당되지 않습니다\n" |
| |
| #: src/std/str.md:20 |
| msgid "\"Words in reverse\"" |
| msgstr "\"역순 단어들\"" |
| |
| #: src/std/str.md:25 |
| msgid "// Copy chars into a vector, sort and remove duplicates\n" |
| msgstr "// 문자들을 벡터로 복사하고, 정렬한 뒤 중복을 제거합니다\n" |
| |
| #: src/std/str.md:30 |
| msgid "// Create an empty and growable `String`\n" |
| msgstr "// 비어 있고 크기 조절 가능한 `String`을 생성합니다\n" |
| |
| #: src/std/str.md:33 |
| msgid "// Insert a char at the end of string\n" |
| msgstr "// 문자열 끝에 문자를 삽입합니다\n" |
| |
| #: src/std/str.md:35 |
| msgid "// Insert a string at the end of string\n" |
| msgstr "// 문자열 끝에 문자열을 삽입합니다\n" |
| |
| #: src/std/str.md:39 |
| msgid "" |
| "// The trimmed string is a slice to the original string, hence no new\n" |
| " // allocation is performed\n" |
| msgstr "" |
| "// 트림된 문자열은 원본 문자열에 대한 슬라이스이므로,\n" |
| "// 새로운 할당이 수행되지 않습니다\n" |
| |
| #: src/std/str.md:43 |
| msgid "\"Used characters: {}\"" |
| msgstr "\"사용된 문자들: {}\"" |
| |
| #: src/std/str.md:45 |
| msgid "// Heap allocate a string\n" |
| msgstr "// 문자열을 힙에 할당합니다\n" |
| |
| #: src/std/str.md:46 |
| msgid "\"I like dogs\"" |
| msgstr "\"I like dogs\"" |
| |
| #: src/std/str.md:47 |
| msgid "// Allocate new memory and store the modified string there\n" |
| msgstr "// 새로운 메모리를 할당하고 수정된 문자열을 그곳에 저장합니다\n" |
| |
| #: src/std/str.md:48 |
| msgid "\"dog\"" |
| msgstr "\"dog\"" |
| |
| #: src/std/str.md:48 |
| msgid "\"cat\"" |
| msgstr "\"cat\"" |
| |
| #: src/std/str.md:50 |
| msgid "\"Alice says: {}\"" |
| msgstr "\"앨리스가 말합니다: {}\"" |
| |
| #: src/std/str.md:51 |
| msgid "\"Bob says: {}\"" |
| msgstr "\"밥이 말합니다: {}\"" |
| |
| #: src/std/str.md:55 |
| msgid "" |
| "More `str`/`String` methods can be found under the [std::str](https://" |
| "doc.rust-lang.org/std/str/) and [std::string](https://doc.rust-lang.org/std/" |
| "string/) modules" |
| msgstr "" |
| "더 많은 `str`/`String` 메서드는 [std::str](https://doc.rust-lang.org/std/" |
| "str/) 및 [std::string](https://doc.rust-lang.org/std/string/) 모듈에서 찾을 " |
| "수 있습니다" |
| |
| #: src/std/str.md:60 |
| msgid "Literals and escapes" |
| msgstr "리터럴과 이스케이프" |
| |
| #: src/std/str.md:62 |
| msgid "" |
| "There are multiple ways to write string literals with special characters in " |
| "them. All result in a similar `&str` so it's best to use the form that is " |
| "the most convenient to write. Similarly there are multiple ways to write " |
| "byte string literals, which all result in `&[u8; N]`." |
| msgstr "" |
| "특수 문자가 포함된 문자열 리터럴을 작성하는 방법은 여러 가지가 있습니다. 모" |
| "두 비슷한 `&str`을 결과로 내므로 가장 작성하기 편리한 형식을 사용하는 것이 좋" |
| "습니다. 마찬가지로 바이트 문자열 리터럴을 작성하는 방법도 여러 가지가 있으" |
| "며, 모두 `&[u8; N]` 결과를 냅니다." |
| |
| #: src/std/str.md:67 |
| msgid "" |
| "Generally special characters are escaped with a backslash character: `\\`. " |
| "This way you can add any character to your string, even unprintable ones and " |
| "ones that you don't know how to type. If you want a literal backslash, " |
| "escape it with another one: `\\\\`" |
| msgstr "" |
| "일반적으로 특수 문자는 백슬래시 문자 `\\`로 이스케이프됩니다. 이 방법을 통해 " |
| "출력 불가능한 문자나 입력 방법을 모르는 문자 등 어떤 문자든 문자열에 추가할 " |
| "수 있습니다. 백슬래시 자체를 리터럴로 원한다면 백슬래시 하나를 더 붙여 `\\\\`" |
| "와 같이 이스케이프하세요." |
| |
| #: src/std/str.md:72 |
| msgid "" |
| "String or character literal delimiters occurring within a literal must be " |
| "escaped: `\"\\\"\"`, `'\\''`." |
| msgstr "" |
| "리터럴 내에 나타나는 문자열 또는 문자 리터럴 구분자는 반드시 이스케이프해야 " |
| "합니다: `\"\\\"\"`, `'\\''`." |
| |
| #: src/std/str.md:76 |
| msgid "// You can use escapes to write bytes by their hexadecimal values...\n" |
| msgstr "" |
| "// 16진수 값을 사용하여 바이트를 작성하기 위해 이스케이프를 사용할 수 있습니" |
| "다...\n" |
| |
| #: src/std/str.md:77 |
| msgid "\"I'm writing \\x52\\x75\\x73\\x74!\"" |
| msgstr "\"I'm writing \\x52\\x75\\x73\\x74!\"" |
| |
| #: src/std/str.md:78 |
| msgid "\"What are you doing\\x3F (\\\\x3F means ?) {}\"" |
| msgstr "\"What are you doing\\x3F (\\\\x3F는 ?를 의미합니다) {}\"" |
| |
| #: src/std/str.md:80 |
| msgid "// ...or Unicode code points.\n" |
| msgstr "// ...또는 유니코드 코드 포인트.\n" |
| |
| #: src/std/str.md:81 |
| msgid "\"\\u{211D}\"" |
| msgstr "\"\\u{211D}\"" |
| |
| #: src/std/str.md:82 |
| msgid "\"\\\"DOUBLE-STRUCK CAPITAL R\\\"\"" |
| msgstr "\"\\\"DOUBLE-STRUCK CAPITAL R\\\"\"" |
| |
| #: src/std/str.md:84 |
| msgid "\"Unicode character {} (U+211D) is called {}\"" |
| msgstr "\"유니코드 문자 {} (U+211D)는 {}라고 불립니다\"" |
| |
| #: src/std/str.md:88 |
| msgid "" |
| "\"String literals\n" |
| " can span multiple lines.\n" |
| " The linebreak and indentation here ->\\\n" |
| " <- can be escaped too!\"" |
| msgstr "" |
| "\"문자열 리터럴은\n" |
| " 여러 줄에 걸쳐 있을 수 있습니다.\n" |
| " 여기서의 줄바꿈과 들여쓰기 ->\\\n" |
| " <- 역시 이스케이프될 수 있습니다!\"" |
| |
| #: src/std/str.md:96 |
| msgid "" |
| "Sometimes there are just too many characters that need to be escaped or it's " |
| "just much more convenient to write a string out as-is. This is where raw " |
| "string literals come into play." |
| msgstr "" |
| "때때로 이스케이프해야 할 문자가 너무 많거나 문자열을 있는 그대로 작성하는 것" |
| "이 훨씬 더 편리할 때가 있습니다. 이때 로우(raw) 문자열 리터럴이 사용됩니다." |
| |
| #: src/std/str.md:101 |
| msgid "r\"Escapes don't work here: \\x3F \\u{211D}\"" |
| msgstr "r\"이스케이프가 여기선 작동하지 않습니다: \\x3F \\u{211D}\"" |
| |
| #: src/std/str.md:104 |
| msgid "// If you need quotes in a raw string, add a pair of #s\n" |
| msgstr "// 로우 문자열에서 따옴표가 필요하다면, # 쌍을 추가하세요\n" |
| |
| #: src/std/str.md:105 |
| msgid "r#\"And then I said: \"There is no escape!\"\"#" |
| msgstr "r#\"And then I said: \"There is no escape!\"\"#" |
| |
| #: src/std/str.md:108 |
| msgid "" |
| "// If you need \"# in your string, just use more #s in the delimiter.\n" |
| " // You can use up to 255 #s.\n" |
| msgstr "" |
| "// 문자열 내에 \"#가 필요하다면, 구분자에 더 많은 #를 사용하세요.\n" |
| " // 최대 255개의 #를 사용할 수 있습니다.\n" |
| |
| #: src/std/str.md:110 |
| msgid "r###\"A string with \"# in it. And even \"##!\"###" |
| msgstr "r###\"A string with \"# in it. And even \"##!\"###" |
| |
| #: src/std/str.md:115 |
| msgid "" |
| "Want a string that's not UTF-8? (Remember, `str` and `String` must be valid " |
| "UTF-8). Or maybe you want an array of bytes that's mostly text? Byte strings " |
| "to the rescue!" |
| msgstr "" |
| "UTF-8이 아닌 문자열을 원하시나요? (`str`과 `String`은 반드시 유효한 UTF-8이어" |
| "야 함을 기억하세요). 아니면 대부분이 텍스트인 바이트 배열을 원하시나요? 바이" |
| "트 문자열이 해결해 드립니다!" |
| |
| #: src/std/str.md:122 |
| msgid "// Note that this is not actually a `&str`\n" |
| msgstr "// 이는 실제로 `&str`이 아님에 유의하세요\n" |
| |
| #: src/std/str.md:123 |
| msgid "b\"this is a byte string\"" |
| msgstr "b\"this is a byte string\"" |
| |
| #: src/std/str.md:125 |
| msgid "" |
| "// Byte arrays don't have the `Display` trait, so printing them is a bit " |
| "limited\n" |
| msgstr "" |
| "// 바이트 배열은 `Display` 트레이트를 가지고 있지 않으므로, 출력에 다소 제한" |
| "이 있습니다\n" |
| |
| #: src/std/str.md:126 |
| msgid "\"A byte string: {:?}\"" |
| msgstr "\"바이트 문자열: {:?}\"" |
| |
| #: src/std/str.md:128 |
| msgid "// Byte strings can have byte escapes...\n" |
| msgstr "// 바이트 문자열은 바이트 이스케이프를 가질 수 있습니다...\n" |
| |
| #: src/std/str.md:129 |
| msgid "b\"\\x52\\x75\\x73\\x74 as bytes\"" |
| msgstr "b\"\\x52\\x75\\x73\\x74 as bytes\"" |
| |
| #: src/std/str.md:130 |
| msgid "" |
| "// ...but no unicode escapes\n" |
| " // let escaped = b\"\\u{211D} is not allowed\";\n" |
| msgstr "" |
| "// ...하지만 유니코드 이스케이프는 허용되지 않습니다\n" |
| " // let escaped = b\"\\u{211D} is not allowed\";\n" |
| |
| #: src/std/str.md:132 |
| msgid "\"Some escaped bytes: {:?}\"" |
| msgstr "\"일부 이스케이프된 바이트: {:?}\"" |
| |
| #: src/std/str.md:135 |
| msgid "// Raw byte strings work just like raw strings\n" |
| msgstr "// 로우 바이트 문자열은 로우 문자열과 똑같이 작동합니다\n" |
| |
| #: src/std/str.md:136 |
| msgid "br\"\\u{211D} is not escaped here\"" |
| msgstr "br\"\\u{211D} is not escaped here\"" |
| |
| #: src/std/str.md:139 |
| msgid "// Converting a byte array to `str` can fail\n" |
| msgstr "// 바이트 배열을 `str`로 변환하는 것은 실패할 수 있습니다\n" |
| |
| #: src/std/str.md:141 |
| msgid "\"And the same as text: '{}'\"" |
| msgstr "\"그리고 텍스트로 변환하면: '{}'\"" |
| |
| #: src/std/str.md:144 |
| msgid "" |
| "br#\"You can also use \"fancier\" formatting, \\\n" |
| " like with normal raw strings\"#" |
| msgstr "" |
| "br#\"일반 로우 문자열처럼, \\\n" |
| " 더 \"화려한\" 포맷팅을 사용할 수도 있습니다\"#" |
| |
| #: src/std/str.md:147 |
| msgid "// Byte strings don't have to be UTF-8\n" |
| msgstr "// 바이트 문자열은 UTF-8일 필요가 없습니다\n" |
| |
| #: src/std/str.md:148 |
| msgid "b\"\\x82\\xe6\\x82\\xa8\\x82\\xb1\\x82\\xbb\"" |
| msgstr "b\"\\x82\\xe6\\x82\\xa8\\x82\\xb1\\x82\\xbb\"" |
| |
| #: src/std/str.md:148 |
| msgid "// \"ようこそ\" in SHIFT-JIS\n" |
| msgstr "// SHIFT-JIS 인코딩의 \"ようこそ\"(환영합니다)\n" |
| |
| #: src/std/str.md:150 |
| msgid "// But then they can't always be converted to `str`\n" |
| msgstr "// 그런 경우에는 항상 `str`로 변환될 수는 없습니다\n" |
| |
| #: src/std/str.md:152 |
| msgid "\"Conversion successful: '{}'\"" |
| msgstr "\"변환 성공: '{}'\"" |
| |
| #: src/std/str.md:153 |
| msgid "\"Conversion failed: {:?}\"" |
| msgstr "\"변환 실패: {:?}\"" |
| |
| #: src/std/str.md:158 |
| msgid "" |
| "For conversions between character encodings check out the [encoding](https://" |
| "crates.io/crates/encoding) crate." |
| msgstr "" |
| "문자 인코딩 간의 변환에 대해서는 [encoding](https://crates.io/crates/" |
| "encoding) 크레이트를 확인해 보세요." |
| |
| #: src/std/str.md:160 |
| msgid "" |
| "A more detailed listing of the ways to write string literals and escape " |
| "characters is given in the ['Tokens' chapter](https://doc.rust-lang.org/" |
| "reference/tokens.html) of the Rust Reference." |
| msgstr "" |
| "문자열 리터럴을 작성하고 문자를 이스케이프하는 방법에 대한 더 자세한 목록은 " |
| "Rust 레퍼런스의 ['Tokens' 장](https://doc.rust-lang.org/reference/" |
| "tokens.html)에 나와 있습니다." |
| |
| #: src/std/option.md:3 |
| msgid "" |
| "Sometimes it's desirable to catch the failure of some parts of a program " |
| "instead of calling `panic!`; this can be accomplished using the `Option` " |
| "enum." |
| msgstr "" |
| "때로는 프로그램의 일부에서 발생하는 실패를 `panic!`을 호출하는 대신 포착하고 " |
| "싶을 때가 있습니다. 이는 `Option` 열거형을 사용하여 수행할 수 있습니다." |
| |
| #: src/std/option.md:6 |
| msgid "The `Option<T>` enum has two variants:" |
| msgstr "`Option<T>` 열거형은 두 가지 변체를 가집니다:" |
| |
| #: src/std/option.md:8 |
| msgid "`None`, to indicate failure or lack of value, and" |
| msgstr "`None`: 실패나 값의 부재를 나타냄" |
| |
| #: src/std/option.md:9 |
| msgid "`Some(value)`, a tuple struct that wraps a `value` with type `T`." |
| msgstr "`Some(value)`: `T` 타입의 `value`를 감싸는 튜플 구조체" |
| |
| #: src/std/option.md:12 |
| msgid "// An integer division that doesn't `panic!`\n" |
| msgstr "// `panic!`을 일으키지 않는 정수 나눗셈\n" |
| |
| #: src/std/option.md:15 |
| msgid "// Failure is represented as the `None` variant\n" |
| msgstr "// 실패는 `None` 변체로 표현됩니다\n" |
| |
| #: src/std/option.md:18 |
| msgid "// Result is wrapped in a `Some` variant\n" |
| msgstr "// 결과는 `Some` 변체로 감싸집니다\n" |
| |
| #: src/std/option.md:22 |
| msgid "// This function handles a division that may not succeed\n" |
| msgstr "// 이 함수는 성공하지 않을 수 있는 나눗셈을 처리합니다\n" |
| |
| #: src/std/option.md:25 |
| msgid "// `Option` values can be pattern matched, just like other enums\n" |
| msgstr "// `Option` 값은 다른 열거형과 마찬가지로 패턴 매칭될 수 있습니다\n" |
| |
| #: src/std/option.md:27 |
| msgid "\"{} / {} failed!\"" |
| msgstr "\"{} / {} 실패!\"" |
| |
| #: src/std/option.md:29 |
| msgid "\"{} / {} = {}\"" |
| msgstr "\"{} / {} = {}\"" |
| |
| #: src/std/option.md:38 |
| msgid "// Binding `None` to a variable needs to be type annotated\n" |
| msgstr "// `None`을 변수에 바인딩할 때는 타입 어노테이션이 필요합니다\n" |
| |
| #: src/std/option.md:44 |
| msgid "// Unwrapping a `Some` variant will extract the value wrapped.\n" |
| msgstr "// `Some` 변체의 래핑을 해제(unwrap)하면 감싸진 값을 추출합니다.\n" |
| |
| #: src/std/option.md:45 src/std/option.md:48 |
| msgid "\"{:?} unwraps to {:?}\"" |
| msgstr "\"{:?}의 래핑을 해제하면 {:?}가 됩니다\"" |
| |
| #: src/std/option.md:47 |
| msgid "// Unwrapping a `None` variant will `panic!`\n" |
| msgstr "// `None` 변체의 래핑을 해제하면 `panic!`이 발생합니다\n" |
| |
| #: src/std/result.md:3 |
| msgid "" |
| "We've seen that the `Option` enum can be used as a return value from " |
| "functions that may fail, where `None` can be returned to indicate failure. " |
| "However, sometimes it is important to express _why_ an operation failed. To " |
| "do this we have the `Result` enum." |
| msgstr "" |
| "우리는 실패할 수 있는 함수로부터 `None`을 반환하여 실패를 나타낼 때 `Option` " |
| "열거형이 사용될 수 있음을 보았습니다. 하지만 때로는 작업이 *왜* 실패했는지 표" |
| "현하는 것이 중요합니다. 이를 위해 우리는 `Result` 열거형을 가지고 있습니다." |
| |
| #: src/std/result.md:8 |
| msgid "The `Result<T, E>` enum has two variants:" |
| msgstr "`Result<T, E>` 열거형은 두 가지 변체를 가집니다:" |
| |
| #: src/std/result.md:10 |
| msgid "" |
| "`Ok(value)` which indicates that the operation succeeded, and wraps the " |
| "`value` returned by the operation. (`value` has type `T`)" |
| msgstr "" |
| "`Ok(value)`: 작업이 성공했음을 나타내며, 작업에 의해 반환된 `value`를 감쌉니" |
| "다. (`value`는 `T` 타입을 가집니다)" |
| |
| #: src/std/result.md:12 |
| msgid "" |
| "`Err(why)`, which indicates that the operation failed, and wraps `why`, " |
| "which (hopefully) explains the cause of the failure. (`why` has type `E`)" |
| msgstr "" |
| "`Err(why)`: 작업이 실패했음을 나타내며, 실패의 원인을 설명하는 (바라건대) " |
| "`why`를 감쌉니다. (`why`는 `E` 타입을 가집니다)" |
| |
| #: src/std/result.md:17 |
| msgid "// Mathematical \"errors\" we want to catch\n" |
| msgstr "// 우리가 포착하고 싶은 수학적 \"에러\"들\n" |
| |
| #: src/std/result.md:29 |
| msgid "" |
| "// This operation would `fail`, instead let's return the reason of\n" |
| " // the failure wrapped in `Err`\n" |
| msgstr "" |
| "// 이 작업은 실패하게 되므로, 대신 실패의 원인을\n" |
| "// `Err`로 감싸서 반환합시다\n" |
| |
| #: src/std/result.md:33 |
| msgid "// This operation is valid, return the result wrapped in `Ok`\n" |
| msgstr "// 이 작업은 유효하므로, 결과를 `Ok`로 감싸서 반환합니다\n" |
| |
| #: src/std/result.md:54 |
| msgid "// `op(x, y)` === `sqrt(ln(x / y))`\n" |
| msgstr "// `op(x, y)` === `sqrt(ln(x / y))`\n" |
| |
| #: src/std/result.md:57 |
| msgid "// This is a three level match pyramid!\n" |
| msgstr "// 이것은 3단계 `match` 피라미드입니다!\n" |
| |
| #: src/std/result.md:71 |
| msgid "// Will this fail?\n" |
| msgstr "// 이것은 실패할까요?\n" |
| |
| #: src/std/result/question_mark.md:3 |
| msgid "" |
| "Chaining results using match can get pretty untidy; luckily, the `?` " |
| "operator can be used to make things pretty again. `?` is used at the end of " |
| "an expression returning a `Result`, and is equivalent to a match expression, " |
| "where the `Err(err)` branch expands to an early `return " |
| "Err(From::from(err))`, and the `Ok(ok)` branch expands to an `ok` expression." |
| msgstr "" |
| "`match`를 사용하여 결과를 체인으로 연결하는 것은 꽤 지저분해질 수 있습니다. " |
| "다행히 `?` 연산자를 사용하여 다시 깔끔하게 만들 수 있습니다. `?`는 `Result`" |
| "를 반환하는 표현식의 끝에 사용되며, `match` 표현식과 동일하게 작동합니다. 여" |
| "기서 `Err(err)` 가지는 조기 리턴인 `return Err(From::from(err))`로 확장되고, " |
| "`Ok(ok)` 가지는 `ok` 표현식으로 확장됩니다." |
| |
| #: src/std/result/question_mark.md:44 |
| msgid "// Intermediate function\n" |
| msgstr "// 중간 함수\n" |
| |
| #: src/std/result/question_mark.md:46 |
| msgid "// if `div` \"fails\", then `DivisionByZero` will be `return`ed\n" |
| msgstr "// 만약 `div`가 \"실패\"하면, `DivisionByZero`가 반환됩니다\n" |
| |
| #: src/std/result/question_mark.md:49 |
| msgid "// if `ln` \"fails\", then `NonPositiveLogarithm` will be `return`ed\n" |
| msgstr "// 만약 `ln`가 \"실패\"하면, `NonPositiveLogarithm`이 반환됩니다\n" |
| |
| #: src/std/result/question_mark.md:59 |
| msgid "\"logarithm of non-positive number\"" |
| msgstr "\"0 이하의 수에 대한 로그\"" |
| |
| #: src/std/result/question_mark.md:61 src/std/panic.md:15 |
| msgid "\"division by zero\"" |
| msgstr "\"0으로 나누기\"" |
| |
| #: src/std/result/question_mark.md:63 |
| msgid "\"square root of negative number\"" |
| msgstr "\"음수의 제곱근\"" |
| |
| #: src/std/result/question_mark.md:75 |
| msgid "" |
| "Be sure to check the [documentation](https://doc.rust-lang.org/std/result/" |
| "index.html), as there are many methods to map/compose `Result`." |
| msgstr "" |
| "`Result`를 매핑하거나 구성(compose)하는 많은 메서드들이 있으니, 반드시 [문서]" |
| "(https://doc.rust-lang.org/std/result/index.html)를 확인해 보세요." |
| |
| #: src/std/panic.md:3 |
| msgid "" |
| "The `panic!` macro can be used to generate a panic and start unwinding its " |
| "stack. While unwinding, the runtime will take care of freeing all the " |
| "resources _owned_ by the thread by calling the destructor of all its objects." |
| msgstr "" |
| "`panic!` 매크로는 패닉을 생성하고 스택 되감기(unwinding)를 시작하는 데 사용" |
| "될 수 있습니다. 되감기를 하는 동안, 런타임은 모든 객체의 데스트럭터를 호출하" |
| "여 해당 스레드가 소유한 모든 리소스를 해제합니다." |
| |
| #: src/std/panic.md:7 |
| msgid "" |
| "Since we are dealing with programs with only one thread, `panic!` will cause " |
| "the program to report the panic message and exit." |
| msgstr "" |
| "우리는 단일 스레드 프로그램만 다루고 있으므로, `panic!`은 프로그램이 패닉 메" |
| "시지를 보고하고 종료하게 만듭니다." |
| |
| #: src/std/panic.md:11 |
| msgid "// Re-implementation of integer division (/)\n" |
| msgstr "// 정수 나눗셈(/)의 재구현\n" |
| |
| #: src/std/panic.md:14 |
| msgid "// Division by zero triggers a panic\n" |
| msgstr "// 0으로 나누기는 패닉을 트리거합니다\n" |
| |
| #: src/std/panic.md:20 |
| msgid "// The `main` task\n" |
| msgstr "// 메인 태스크\n" |
| |
| #: src/std/panic.md:23 |
| msgid "// Heap allocated integer\n" |
| msgstr "// 힙 할당 정수\n" |
| |
| #: src/std/panic.md:26 |
| msgid "// This operation will trigger a task failure\n" |
| msgstr "// 이 작업은 태스크 실패를 트리거합니다\n" |
| |
| #: src/std/panic.md:29 |
| msgid "\"This point won't be reached!\"" |
| msgstr "\"이 지점에는 도달하지 않습니다!\"" |
| |
| #: src/std/panic.md:31 |
| msgid "// `_x` should get destroyed at this point\n" |
| msgstr "// 이 지점에서 `_x`가 파괴되어야 합니다\n" |
| |
| #: src/std/panic.md:35 |
| msgid "Let's check that `panic!` doesn't leak memory." |
| msgstr "`panic!`이 메모리를 누수하지 않는지 확인해 봅시다." |
| |
| #: src/std/hash.md:3 |
| msgid "" |
| "Where vectors store values by an integer index, `HashMap`s store values by " |
| "key. `HashMap` keys can be booleans, integers, strings, or any other type " |
| "that implements the `Eq` and `Hash` traits. More on this in the next section." |
| msgstr "" |
| "벡터가 정수 인덱스로 값을 저장하는 반면, `HashMap`은 키(key)로 값을 저장합니" |
| "다. `HashMap`의 키는 불리언, 정수, 문자열 또는 `Eq`와 `Hash` 트레이트를 구현" |
| "하는 임의의 다른 타입이 될 수 있습니다. 이에 대해서는 다음 섹션에서 자세히 다" |
| "룹니다." |
| |
| #: src/std/hash.md:8 |
| msgid "" |
| "Like vectors, `HashMap`s are growable, but HashMaps can also shrink " |
| "themselves when they have excess space. You can create a HashMap with a " |
| "certain starting capacity using `HashMap::with_capacity(uint)`, or use " |
| "`HashMap::new()` to get a HashMap with a default initial capacity " |
| "(recommended)." |
| msgstr "" |
| "벡터와 마찬가지로 `HashMap`은 늘어날 수 있지만, 공간이 남을 때는 스스로 줄어" |
| "들 수도 있습니다. `HashMap::with_capacity(uint)`를 사용하여 특정 시작 용량으" |
| "로 HashMap을 생성하거나, `HashMap::new()`를 사용하여 기본 초기 용량을 가진 " |
| "HashMap을 얻을 수 있습니다(권장됨)." |
| |
| #: src/std/hash.md:19 src/std/hash.md:30 |
| msgid "\"798-1364\"" |
| msgstr "\"798-1364\"" |
| |
| #: src/std/hash.md:19 |
| msgid "" |
| "\"We're sorry, the call cannot be completed as dialed.\n" |
| " Please hang up and try again.\"" |
| msgstr "" |
| "\"죄송합니다, 전화 연결을 할 수 없습니다.\n" |
| " 전화를 끊고 다시 시도해 주세요.\"" |
| |
| #: src/std/hash.md:21 src/std/hash.md:31 |
| msgid "\"645-7689\"" |
| msgstr "\"645-7689\"" |
| |
| #: src/std/hash.md:21 |
| msgid "" |
| "\"Hello, this is Mr. Awesome's Pizza. My name is Fred.\n" |
| " What can I get for you today?\"" |
| msgstr "" |
| "\"안녕하세요, 어썸 피자입니다. 저는 프레드라고 합니다.\n" |
| " 오늘 무엇을 도와드릴까요?\"" |
| |
| #: src/std/hash.md:23 |
| msgid "\"Hi! Who is this again?\"" |
| msgstr "\"안녕! 누구시더라?\"" |
| |
| #: src/std/hash.md:30 src/std/hash.md:36 src/std/hash.md:43 |
| msgid "\"Daniel\"" |
| msgstr "\"다니엘\"" |
| |
| #: src/std/hash.md:31 src/std/hash.md:45 src/std/hash.md:50 |
| msgid "\"Ashley\"" |
| msgstr "\"애슐리\"" |
| |
| #: src/std/hash.md:32 |
| msgid "\"Katie\"" |
| msgstr "\"케이티\"" |
| |
| #: src/std/hash.md:32 |
| msgid "\"435-8291\"" |
| msgstr "\"435-8291\"" |
| |
| #: src/std/hash.md:33 |
| msgid "\"Robert\"" |
| msgstr "\"로버트\"" |
| |
| #: src/std/hash.md:33 |
| msgid "\"956-1745\"" |
| msgstr "\"956-1745\"" |
| |
| #: src/std/hash.md:35 |
| msgid "// Takes a reference and returns Option<&V>\n" |
| msgstr "// 참조를 인자로 받아 `Option<&V>`를 반환합니다\n" |
| |
| #: src/std/hash.md:37 |
| msgid "\"Calling Daniel: {}\"" |
| msgstr "\"다니엘에게 전화 거는 중: {}\"" |
| |
| #: src/std/hash.md:38 |
| msgid "\"Don't have Daniel's number.\"" |
| msgstr "\"다니엘의 번호가 없습니다.\"" |
| |
| #: src/std/hash.md:41 |
| msgid "" |
| "// `HashMap::insert()` returns `None`\n" |
| " // if the inserted value is new, `Some(value)` otherwise\n" |
| msgstr "" |
| "// `HashMap::insert()`는 삽입된 값이 새로운 것이면 `None`을,\n" |
| " // 그렇지 않으면 `Some(value)`를 반환합니다\n" |
| |
| #: src/std/hash.md:43 |
| msgid "\"164-6743\"" |
| msgstr "\"164-6743\"" |
| |
| #: src/std/hash.md:46 |
| msgid "\"Calling Ashley: {}\"" |
| msgstr "\"애슐리에게 전화 거는 중: {}\"" |
| |
| #: src/std/hash.md:47 |
| msgid "\"Don't have Ashley's number.\"" |
| msgstr "\"애슐리의 번호가 없습니다.\"" |
| |
| #: src/std/hash.md:52 |
| msgid "" |
| "// `HashMap::iter()` returns an iterator that yields\n" |
| " // (&'a key, &'a value) pairs in arbitrary order.\n" |
| msgstr "" |
| "// `HashMap::iter()`는 (&'a key, &'a value) 쌍을\n" |
| " // 임의의 순서로 내놓는 이터레이터를 반환합니다.\n" |
| |
| #: src/std/hash.md:55 |
| msgid "\"Calling {}: {}\"" |
| msgstr "\"{}에게 전화 거는 중: {}\"" |
| |
| #: src/std/hash.md:60 |
| msgid "" |
| "For more information on how hashing and hash maps (sometimes called hash " |
| "tables) work, have a look at [Hash Table Wikipedia](https://en.wikipedia.org/" |
| "wiki/Hash_table)" |
| msgstr "" |
| "해싱과 해시 맵(때때로 해시 테이블이라고도 불림)이 어떻게 작동하는지에 대한 " |
| "더 자세한 정보는 [Wikipedia의 해시 테이블](https://en.wikipedia.org/wiki/" |
| "Hash_table)을 참조하세요." |
| |
| #: src/std/hash/alt_key_types.md:3 |
| msgid "" |
| "Any type that implements the `Eq` and `Hash` traits can be a key in " |
| "`HashMap`. This includes:" |
| msgstr "" |
| "`Eq`와 `Hash` 트레이트를 구현하는 어떤 타입이든 `HashMap`의 키가 될 수 있습니" |
| "다. 여기에는 다음이 포함됩니다:" |
| |
| #: src/std/hash/alt_key_types.md:6 |
| msgid "`bool` (though not very useful since there are only two possible keys)" |
| msgstr "`bool` (가능한 키가 두 개뿐이라 그리 유용하진 않지만요)" |
| |
| #: src/std/hash/alt_key_types.md:7 |
| msgid "`int`, `uint`, and all variations thereof" |
| msgstr "`int`, `uint` 및 그 모든 변형들" |
| |
| #: src/std/hash/alt_key_types.md:8 |
| msgid "" |
| "`String` and `&str` (protip: you can have a `HashMap` keyed by `String` and " |
| "call `.get()` with an `&str`)" |
| msgstr "" |
| "`String`과 `&str` (꿀팁: `String`을 키로 하는 `HashMap`을 만들고 `&str`을 사" |
| "용하여 `.get()`을 호출할 수 있습니다)" |
| |
| #: src/std/hash/alt_key_types.md:11 |
| msgid "" |
| "Note that `f32` and `f64` do _not_ implement `Hash`, likely because " |
| "[floating-point precision errors](https://en.wikipedia.org/wiki/" |
| "Floating_point#Accuracy_problems) would make using them as hashmap keys " |
| "horribly error-prone." |
| msgstr "" |
| "`f32`와 `f64`는 `Hash`를 구현하지 않는다는 점에 유의하세요. 아마도 [부동 소수" |
| "점 정밀도 에러](https://en.wikipedia.org/wiki/" |
| "Floating_point#Accuracy_problems)로 인해 이들을 해시 맵 키로 사용하는 것이 극" |
| "도로 에러에 취약해질 수 있기 때문일 것입니다." |
| |
| #: src/std/hash/alt_key_types.md:15 |
| msgid "" |
| "All collection classes implement `Eq` and `Hash` if their contained type " |
| "also respectively implements `Eq` and `Hash`. For example, `Vec<T>` will " |
| "implement `Hash` if `T` implements `Hash`." |
| msgstr "" |
| "모든 컬렉션 클래스는 포함된 타입이 각각 `Eq`와 `Hash`를 구현한다면 `Eq`와 " |
| "`Hash`를 구현합니다. 예를 들어, `Vec<T>`는 `T`가 `Hash`를 구현한다면 `Hash`" |
| "를 구현합니다." |
| |
| #: src/std/hash/alt_key_types.md:19 |
| msgid "" |
| "You can easily implement `Eq` and `Hash` for a custom type with just one " |
| "line: `#[derive(PartialEq, Eq, Hash)]`" |
| msgstr "" |
| "단 한 줄의 코드로 커스텀 타입에 대해 `Eq`와 `Hash`를 쉽게 구현할 수 있습니" |
| "다: `#[derive(PartialEq, Eq, Hash)]`" |
| |
| #: src/std/hash/alt_key_types.md:22 |
| msgid "" |
| "The compiler will do the rest. If you want more control over the details, " |
| "you can implement `Eq` and/or `Hash` yourself. This guide will not cover the " |
| "specifics of implementing `Hash`." |
| msgstr "" |
| "컴파일러가 나머지를 알아서 할 것입니다. 만약 세부 사항을 더 제어하고 싶다면, " |
| "`Eq`나 `Hash`를 직접 구현할 수 있습니다. 이 가이드에서는 `Hash` 구현의 구체적" |
| "인 내용은 다루지 않습니다." |
| |
| #: src/std/hash/alt_key_types.md:26 |
| msgid "" |
| "To play around with using a `struct` in `HashMap`, let's try making a very " |
| "simple user logon system:" |
| msgstr "" |
| "`HashMap`에서 `struct`를 사용하는 것을 연습해 보기 위해, 매우 간단한 사용자 " |
| "로그인 시스템을 만들어 봅시다:" |
| |
| #: src/std/hash/alt_key_types.md:31 |
| msgid "// Eq requires that you derive PartialEq on the type.\n" |
| msgstr "// Eq는 해당 타입에 대해 PartialEq를 유도(derive)할 것을 요구합니다.\n" |
| |
| #: src/std/hash/alt_key_types.md:48 |
| msgid "\"Username: {}\"" |
| msgstr "\"사용자 이름: {}\"" |
| |
| #: src/std/hash/alt_key_types.md:49 |
| msgid "\"Password: {}\"" |
| msgstr "\"비밀번호: {}\"" |
| |
| #: src/std/hash/alt_key_types.md:50 |
| msgid "\"Attempting logon...\"" |
| msgstr "\"로그인 시도 중...\"" |
| |
| #: src/std/hash/alt_key_types.md:59 |
| msgid "\"Successful logon!\"" |
| msgstr "\"로그인 성공!\"" |
| |
| #: src/std/hash/alt_key_types.md:60 |
| msgid "\"Name: {}\"" |
| msgstr "\"이름: {}\"" |
| |
| #: src/std/hash/alt_key_types.md:61 |
| msgid "\"Email: {}\"" |
| msgstr "\"이메일: {}\"" |
| |
| #: src/std/hash/alt_key_types.md:63 |
| msgid "\"Login failed!\"" |
| msgstr "\"로그인 실패!\"" |
| |
| #: src/std/hash/alt_key_types.md:71 src/std/hash/alt_key_types.md:82 |
| #: src/std/hash/alt_key_types.md:84 |
| msgid "\"j.everyman\"" |
| msgstr "\"j.everyman\"" |
| |
| #: src/std/hash/alt_key_types.md:72 src/std/hash/alt_key_types.md:84 |
| msgid "\"password123\"" |
| msgstr "\"password123\"" |
| |
| #: src/std/hash/alt_key_types.md:76 |
| msgid "\"John Everyman\"" |
| msgstr "\"John Everyman\"" |
| |
| #: src/std/hash/alt_key_types.md:77 |
| msgid "\"j.everyman@email.com\"" |
| msgstr "\"j.everyman@email.com\"" |
| |
| #: src/std/hash/alt_key_types.md:82 |
| msgid "\"psasword123\"" |
| msgstr "\"psasword123\"" |
| |
| #: src/std/hash/hashset.md:3 |
| msgid "" |
| "Consider a `HashSet` as a `HashMap` where we just care about the keys " |
| "( `HashSet<T>` is, in actuality, just a wrapper around `HashMap<T, ()>`)." |
| msgstr "" |
| "`HashSet`을 키에만 관심이 있는 `HashMap`이라고 생각해보세요 (`HashSet<T>`는 " |
| "실제로 `HashMap<T, ()>`의 래퍼(wrapper)일 뿐입니다)." |
| |
| #: src/std/hash/hashset.md:6 |
| msgid "" |
| "\"What's the point of that?\" you ask. \"I could just store the keys in a " |
| "`Vec`.\"" |
| msgstr "" |
| "\"그게 무슨 소용이죠?\"라고 물으실 수 있습니다. \"그냥 키를 `Vec`에 저장할 수" |
| "도 있잖아요.\"" |
| |
| #: src/std/hash/hashset.md:8 |
| msgid "" |
| "A `HashSet`'s unique feature is that it is guaranteed to not have duplicate " |
| "elements. That's the contract that any set collection fulfills. `HashSet` is " |
| "just one implementation. (see also: [`BTreeSet`](https://doc.rust-lang.org/" |
| "std/collections/struct.BTreeSet.html))" |
| msgstr "" |
| "`HashSet`의 고유한 특징은 중복된 요소가 없음을 보장한다는 것입니다. 이는 모" |
| "든 집합(set) 컬렉션이 지키는 계약입니다. `HashSet`은 그 중 하나의 구현일 뿐입" |
| "니다. (참고: [`BTreeSet`](https://doc.rust-lang.org/std/collections/" |
| "struct.BTreeSet.html))" |
| |
| #: src/std/hash/hashset.md:13 |
| msgid "" |
| "If you insert a value that is already present in the `HashSet`, (i.e. the " |
| "new value is equal to the existing and they both have the same hash), then " |
| "the new value will replace the old." |
| msgstr "" |
| "이미 `HashSet`에 존재하는 값을 삽입하면 (즉, 새 값이 기존 값과 같고 해시도 같" |
| "다면), 새 값이 기존 값을 대체하게 됩니다." |
| |
| #: src/std/hash/hashset.md:17 |
| msgid "" |
| "This is great for when you never want more than one of something, or when " |
| "you want to know if you've already got something." |
| msgstr "" |
| "이는 무언가를 중복 없이 유지하고 싶을 때나, 이미 가지고 있는지 알고 싶을 때 " |
| "매우 유용합니다." |
| |
| #: src/std/hash/hashset.md:20 |
| msgid "But sets can do more than that." |
| msgstr "하지만 집합은 그 이상의 일을 할 수 있습니다." |
| |
| #: src/std/hash/hashset.md:22 |
| msgid "" |
| "Sets have 4 primary operations (all of the following calls return an " |
| "iterator):" |
| msgstr "" |
| "집합은 4가지 주요 연산을 가집니다 (다음 호출들은 모두 이터레이터를 반환합니" |
| "다):" |
| |
| #: src/std/hash/hashset.md:24 |
| msgid "`union`: get all the unique elements in both sets." |
| msgstr "`union`(합집합): 두 집합에 있는 모든 고유한 요소들을 가져옵니다." |
| |
| #: src/std/hash/hashset.md:26 |
| msgid "" |
| "`difference`: get all the elements that are in the first set but not the " |
| "second." |
| msgstr "" |
| "`difference`(차집합): 첫 번째 집합에는 있지만 두 번째 집합에는 없는 모든 요소" |
| "들을 가져옵니다." |
| |
| #: src/std/hash/hashset.md:28 |
| msgid "`intersection`: get all the elements that are only in _both_ sets." |
| msgstr "" |
| "`intersection`(교집합): 오직 *양쪽* 집합 모두에 있는 모든 요소들을 가져옵니" |
| "다." |
| |
| #: src/std/hash/hashset.md:30 |
| msgid "" |
| "`symmetric_difference`: get all the elements that are in one set or the " |
| "other, but _not_ both." |
| msgstr "" |
| "`symmetric_difference`(대칭차집합): 한쪽 집합에는 있지만 *양쪽 모두*에 있지" |
| "는 않은 모든 요소들을 가져옵니다." |
| |
| #: src/std/hash/hashset.md:33 |
| msgid "Try all of these in the following example:" |
| msgstr "다음 예제에서 이들 모두를 시도해 보세요:" |
| |
| #: src/std/hash/hashset.md:45 |
| msgid "" |
| "// `HashSet::insert()` returns false if\n" |
| " // there was a value already present.\n" |
| msgstr "// `HashSet::insert()`는 값이 이미 존재하면 false를 반환합니다.\n" |
| |
| #: src/std/hash/hashset.md:47 |
| msgid "\"Value 4 is already in set B!\"" |
| msgstr "\"값 4는 이미 집합 B에 있습니다!\"" |
| |
| #: src/std/hash/hashset.md:52 |
| msgid "" |
| "// If a collection's element type implements `Debug`,\n" |
| " // then the collection implements `Debug`.\n" |
| " // It usually prints its elements in the format `[elem1, elem2, ...]`\n" |
| msgstr "" |
| "// 컬렉션의 요소 타입이 `Debug`를 구현한다면,\n" |
| "// 컬렉션도 `Debug`를 구현합니다.\n" |
| "// 보통 `[elem1, elem2, ...]` 형식으로 요소를 출력합니다.\n" |
| |
| #: src/std/hash/hashset.md:55 |
| msgid "\"A: {:?}\"" |
| msgstr "\"A: {:?}\"" |
| |
| #: src/std/hash/hashset.md:56 |
| msgid "\"B: {:?}\"" |
| msgstr "\"B: {:?}\"" |
| |
| #: src/std/hash/hashset.md:58 |
| msgid "// Print [1, 2, 3, 4, 5] in arbitrary order\n" |
| msgstr "// [1, 2, 3, 4, 5]를 임의의 순서로 출력합니다\n" |
| |
| #: src/std/hash/hashset.md:59 |
| msgid "\"Union: {:?}\"" |
| msgstr "\"합집합: {:?}\"" |
| |
| #: src/std/hash/hashset.md:61 |
| msgid "// This should print [1]\n" |
| msgstr "// 이는 [1]을 출력해야 합니다\n" |
| |
| #: src/std/hash/hashset.md:62 |
| msgid "\"Difference: {:?}\"" |
| msgstr "\"차집합: {:?}\"" |
| |
| #: src/std/hash/hashset.md:64 |
| msgid "// Print [2, 3, 4] in arbitrary order.\n" |
| msgstr "// [2, 3, 4]를 임의의 순서로 출력합니다.\n" |
| |
| #: src/std/hash/hashset.md:65 |
| msgid "\"Intersection: {:?}\"" |
| msgstr "\"교집합: {:?}\"" |
| |
| #: src/std/hash/hashset.md:67 |
| msgid "// Print [1, 5]\n" |
| msgstr "// [1, 5]를 출력합니다\n" |
| |
| #: src/std/hash/hashset.md:68 |
| msgid "\"Symmetric Difference: {:?}\"" |
| msgstr "\"대칭차집합: {:?}\"" |
| |
| #: src/std/hash/hashset.md:73 |
| msgid "" |
| "(Examples are adapted from the [documentation.](https://doc.rust-lang.org/" |
| "std/collections/struct.HashSet.html#method.difference))" |
| msgstr "" |
| "(예제는 [문서](https://doc.rust-lang.org/std/collections/" |
| "struct.HashSet.html#method.difference)에서 발췌 및 수정되었습니다.)" |
| |
| #: src/std/rc.md:3 |
| msgid "" |
| "When multiple ownership is needed, `Rc`(Reference Counting) can be used. " |
| "`Rc` keeps track of the number of the references which means the number of " |
| "owners of the value wrapped inside an `Rc`." |
| msgstr "" |
| "다중 소유권이 필요한 경우, `Rc`(참조 횟수 계산, Reference Counting)를 사용할 " |
| "수 있습니다. `Rc`는 참조의 개수를 추적하며, 이는 `Rc` 내부에 감싸진 값의 소유" |
| "자 수를 의미합니다." |
| |
| #: src/std/rc.md:7 |
| msgid "" |
| "Reference count of an `Rc` increases by 1 whenever an `Rc` is cloned, and " |
| "decreases by 1 whenever one cloned `Rc` is dropped out of the scope. When an " |
| "`Rc`'s reference count becomes zero (which means there are no remaining " |
| "owners), both the `Rc` and the value are all dropped." |
| msgstr "" |
| "`Rc`의 참조 횟수는 `Rc`가 클론될 때마다 1씩 증가하고, 클론된 `Rc`가 스코프를 " |
| "벗어날 때마다 1씩 감소합니다. `Rc`의 참조 횟수가 0이 되면 (즉, 남은 소유자가 " |
| "없으면), `Rc`와 그 내부의 값 모두 해제됩니다." |
| |
| #: src/std/rc.md:12 |
| msgid "" |
| "Cloning an `Rc` never performs a deep copy. Cloning creates just another " |
| "pointer to the wrapped value, and increments the count." |
| msgstr "" |
| "`Rc`를 클론하는 것은 결코 깊은 복사(deep copy)를 수행하지 않습니다. 클론은 단" |
| "지 감싸진 값을 가리키는 또 다른 포인터를 생성하고, 횟수를 증가시킬 뿐입니다." |
| |
| #: src/std/rc.md:19 |
| msgid "\"Rc examples\"" |
| msgstr "\"Rc 예제\"" |
| |
| #: src/std/rc.md:21 |
| msgid "\"--- rc_a is created ---\"" |
| msgstr "\"--- rc_a가 생성됨 ---\"" |
| |
| #: src/std/rc.md:24 src/std/rc.md:31 src/std/rc.md:43 |
| msgid "\"Reference Count of rc_a: {}\"" |
| msgstr "\"rc_a의 참조 횟수: {}\"" |
| |
| #: src/std/rc.md:27 |
| msgid "\"--- rc_a is cloned to rc_b ---\"" |
| msgstr "\"--- rc_a가 rc_b로 클론됨 ---\"" |
| |
| #: src/std/rc.md:30 |
| msgid "\"Reference Count of rc_b: {}\"" |
| msgstr "\"rc_b의 참조 횟수: {}\"" |
| |
| #: src/std/rc.md:33 |
| msgid "// Two `Rc`s are equal if their inner values are equal\n" |
| msgstr "// 두 `Rc`는 내부 값이 같으면 같습니다\n" |
| |
| #: src/std/rc.md:34 |
| msgid "\"rc_a and rc_b are equal: {}\"" |
| msgstr "\"rc_a와 rc_b는 같음: {}\"" |
| |
| #: src/std/rc.md:36 |
| msgid "// We can use methods of a value directly\n" |
| msgstr "// 값의 메서드들을 직접 사용할 수 있습니다\n" |
| |
| #: src/std/rc.md:37 |
| msgid "\"Length of the value inside rc_a: {}\"" |
| msgstr "\"rc_a 내부 값의 길이: {}\"" |
| |
| #: src/std/rc.md:38 |
| msgid "\"Value of rc_b: {}\"" |
| msgstr "\"rc_b의 값: {}\"" |
| |
| #: src/std/rc.md:40 |
| msgid "\"--- rc_b is dropped out of scope ---\"" |
| msgstr "\"--- rc_b가 스코프를 벗어나 해제됨 ---\"" |
| |
| #: src/std/rc.md:45 |
| msgid "\"--- rc_a is dropped out of scope ---\"" |
| msgstr "\"--- rc_a가 스코프를 벗어나 해제됨 ---\"" |
| |
| #: src/std/rc.md:48 |
| msgid "" |
| "// Error! `rc_examples` already moved into `rc_a`\n" |
| " // And when `rc_a` is dropped, `rc_examples` is dropped together\n" |
| " // println!(\"rc_examples: {}\", rc_examples);\n" |
| " // TODO ^ Try uncommenting this line\n" |
| msgstr "" |
| "// 에러! `rc_examples`는 이미 `rc_a`로 이동되었습니다\n" |
| " // 그리고 `rc_a`가 해제될 때, `rc_examples`도 함께 해제됩니다\n" |
| " // println!(\"rc_examples: {}\", rc_examples);\n" |
| " // TODO ^ 이 줄의 주석을 해제해 보세요\n" |
| |
| #: src/std/rc.md:57 |
| msgid "" |
| "[std::rc](https://doc.rust-lang.org/std/rc/index.html) and [std::sync::arc]" |
| "(https://doc.rust-lang.org/std/sync/struct.Arc.html)." |
| msgstr "" |
| "[std::rc](https://doc.rust-lang.org/std/rc/index.html)와 [std::sync::arc]" |
| "(https://doc.rust-lang.org/std/sync/struct.Arc.html)." |
| |
| #: src/std/arc.md:1 |
| msgid "Arc" |
| msgstr "Arc" |
| |
| #: src/std/arc.md:3 |
| msgid "" |
| "When shared ownership between threads is needed, `Arc`(Atomically Reference " |
| "Counted) can be used. This struct, via the `Clone` implementation can create " |
| "a reference pointer for the location of a value in the memory heap while " |
| "increasing the reference counter. As it shares ownership between threads, " |
| "when the last reference pointer to a value is out of scope, the variable is " |
| "dropped." |
| msgstr "" |
| "스레드 간의 공유 소유권이 필요한 경우, `Arc`(원자적 참조 횟수 계산, " |
| "Atomically Reference Counted)를 사용할 수 있습니다. 이 구조체는 `Clone` 구현" |
| "을 통해 힙 메모리에 있는 값의 위치를 가리키는 참조 포인터를 생성하고 참조 횟" |
| "수를 증가시킵니다. 스레드 간에 소유권을 공유하므로, 값에 대한 마지막 참조 포" |
| "인터가 스코프를 벗어날 때 변수가 해제됩니다." |
| |
| #: src/std/arc.md:15 |
| msgid "// This variable declaration is where its value is specified.\n" |
| msgstr "// 이 변수 선언에서 값이 지정됩니다.\n" |
| |
| #: src/std/arc.md:16 |
| msgid "\"the same apple\"" |
| msgstr "\"같은 사과\"" |
| |
| #: src/std/arc.md:19 |
| msgid "" |
| "// Here there is no value specification as it is a pointer to a\n" |
| " // reference in the memory heap.\n" |
| msgstr "" |
| "// 여기서는 힙 메모리의 참조를 가리키는 포인터이므로 별도의 값 지정이 없습니" |
| "다.\n" |
| |
| #: src/std/arc.md:24 |
| msgid "" |
| "// As Arc was used, threads can be spawned using the value allocated\n" |
| " // in the Arc variable pointer's location.\n" |
| msgstr "" |
| "// `Arc`를 사용했으므로, `Arc` 변수 포인터 위치에 할당된 값을 사용하여 스레드" |
| "를 생성할 수 있습니다.\n" |
| |
| #: src/std/arc.md:30 |
| msgid "// Make sure all Arc instances are printed from spawned threads.\n" |
| msgstr "// 모든 `Arc` 인스턴스가 생성된 스레드에서 출력되도록 합니다.\n" |
| |
| #: src/std_misc.md:3 |
| msgid "" |
| "Many other types are provided by the std library to support things such as:" |
| msgstr "" |
| "표준 라이브러리는 다음과 같은 것들을 지원하기 위해 많은 다른 타입들을 제공합" |
| "니다:" |
| |
| #: src/std_misc.md:10 |
| msgid "These expand beyond what the [primitives](primitives.md) provide." |
| msgstr "이들은 [기본 자료형](primitives.md)이 제공하는 것 이상으로 확장됩니다." |
| |
| #: src/std_misc/threads.md:3 |
| msgid "" |
| "Rust provides a mechanism for spawning native OS threads via the `spawn` " |
| "function, the argument of this function is a moving closure." |
| msgstr "" |
| "Rust는 `spawn` 함수를 통해 네이티브 OS 스레드를 생성하는 메커니즘을 제공합니" |
| "다. 이 함수의 인자는 이동(moving) 클로저입니다." |
| |
| #: src/std_misc/threads.md:10 src/std_misc/threads/testcase_mapreduce.md:28 |
| msgid "// This is the `main` thread\n" |
| msgstr "// 메인 스레드입니다\n" |
| |
| #: src/std_misc/threads.md:13 |
| msgid "// Make a vector to hold the children which are spawned.\n" |
| msgstr "// 생성된 자식 스레드들을 담을 벡터를 만듭니다.\n" |
| |
| #: src/std_misc/threads.md:17 |
| msgid "// Spin up another thread\n" |
| msgstr "// 또 다른 스레드를 생성합니다\n" |
| |
| #: src/std_misc/threads.md:19 |
| msgid "\"this is thread number {}\"" |
| msgstr "\"이것은 {}번 스레드입니다\"" |
| |
| #: src/std_misc/threads.md:24 |
| msgid "// Wait for the thread to finish. Returns a result.\n" |
| msgstr "// 스레드가 종료될 때까지 기다립니다. 결과를 반환합니다.\n" |
| |
| #: src/std_misc/threads.md:30 |
| msgid "These threads will be scheduled by the OS." |
| msgstr "이러한 스레드들은 OS에 의해 스케줄링됩니다." |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:3 |
| msgid "" |
| "Rust makes it very easy to parallelize data processing, without many of the " |
| "headaches traditionally associated with such an attempt." |
| msgstr "" |
| "Rust는 전통적으로 이러한 시도와 관련된 많은 골칫거리 없이 데이터 처리를 병렬" |
| "화하는 것을 매우 쉽게 만들어 줍니다." |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:5 |
| msgid "" |
| "The standard library provides great threading primitives out of the box. " |
| "These, combined with Rust's concept of Ownership and aliasing rules, " |
| "automatically prevent data races." |
| msgstr "" |
| "표준 라이브러리는 훌륭한 스레딩 프리미티브를 즉시 제공합니다. 이들은 Rust의 " |
| "소유권 개념 및 에일리어싱 규칙과 결합하여 자동으로 데이터 경합(data races)을 " |
| "방지합니다." |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:9 |
| msgid "" |
| "The aliasing rules (one writable reference XOR many readable references) " |
| "automatically prevent you from manipulating state that is visible to other " |
| "threads. (Where synchronization is needed, there are synchronization " |
| "primitives like `Mutex`es or `Channel`s.)" |
| msgstr "" |
| "에일리어싱 규칙(하나의 쓰기 가능 참조 XOR 여러 개의 읽기 가능 참조)은 다른 스" |
| "레드에 보이는 상태를 조작하는 것을 자동으로 방지합니다. (동기화가 필요한 곳에" |
| "는 `Mutex`나 `Channel`과 같은 동기화 프리미티브가 있습니다.)" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:14 |
| msgid "" |
| "In this example, we will calculate the sum of all digits in a block of " |
| "numbers. We will do this by parcelling out chunks of the block into " |
| "different threads. Each thread will sum its tiny block of digits, and " |
| "subsequently we will sum the intermediate sums produced by each thread." |
| msgstr "" |
| "이 예제에서, 우리는 숫자 블록에 있는 모든 숫자의 합을 계산할 것입니다. 블록" |
| "의 덩어리들을 서로 다른 스레드에 할당하여 이를 수행할 것입니다. 각 스레드는 " |
| "자신의 작은 숫자 블록의 합을 구하고, 이어서 각 스레드에서 생성된 중간 합계들" |
| "을 모두 더할 것입니다." |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:19 |
| msgid "" |
| "Note that, although we're passing references across thread boundaries, Rust " |
| "understands that we're only passing read-only references, and that thus no " |
| "unsafety or data races can occur. Also because the references we're passing " |
| "have `'static` lifetimes, Rust understands that our data won't be destroyed " |
| "while these threads are still running. (When you need to share non-`static` " |
| "data between threads, you can use a smart pointer like `Arc` to keep the " |
| "data alive and avoid non-`static` lifetimes.)" |
| msgstr "" |
| "스레드 경계를 넘어 참조를 전달하고 있지만, Rust는 우리가 읽기 전용 참조만 전" |
| "달하고 있음을 이해하며, 따라서 안전하지 않은 상황이나 데이터 경합이 발생할 " |
| "수 없음을 알고 있습니다. 또한 우리가 전달하는 참조들이 `'static` 라이프타임" |
| "을 가지고 있기 때문에, Rust는 이 스레드들이 실행되는 동안 데이터가 파괴되지 " |
| "않을 것임을 이해합니다. (스레드 간에 `static`이 아닌 데이터를 공유해야 할 때" |
| "는 `Arc`와 같은 스마트 포인터를 사용하여 데이터를 유지하고 `static`이 아닌 라" |
| "이프타임 문제를 피할 수 있습니다.)" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:32 |
| msgid "" |
| "// This is our data to process.\n" |
| " // We will calculate the sum of all digits via a threaded map-reduce " |
| "algorithm.\n" |
| " // Each whitespace separated chunk will be handled in a different " |
| "thread.\n" |
| " //\n" |
| " // TODO: see what happens to the output if you insert spaces!\n" |
| msgstr "" |
| "// 처리할 데이터입니다.\n" |
| " // 스레드된 맵-리듀스(map-reduce) 알고리즘을 통해 모든 숫자의 합을 계산" |
| "할 것입니다.\n" |
| " // 공백으로 구분된 각 덩어리는 서로 다른 스레드에서 처리될 것입니다.\n" |
| " //\n" |
| " // TODO: 공백을 삽입하면 출력에 어떤 변화가 생기는지 확인해 보세요!\n" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:37 |
| msgid "" |
| "\"86967897737416471853297327050364959\n" |
| "11861322575564723963297542624962850\n" |
| "70856234701860851907960690014725639\n" |
| "38397966707106094172783238747669219\n" |
| "52380795257888236525459303330302837\n" |
| "58495327135744041048897885734297812\n" |
| "69920216438980873548808413720956532\n" |
| "16278424637452589860345374828574668\"" |
| msgstr "" |
| "\"86967897737416471853297327050364959\n" |
| "11861322575564723963297542624962850\n" |
| "70856234701860851907960690014725639\n" |
| "38397966707106094172783238747669219\n" |
| "52380795257888236525459303330302837\n" |
| "58495327135744041048897885734297812\n" |
| "69920216438980873548808413720956532\n" |
| "16278424637452589860345374828574668\"" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:46 |
| msgid "// Make a vector to hold the child-threads which we will spawn.\n" |
| msgstr "// 우리가 생성할 자식 스레드들을 담을 벡터를 만듭니다.\n" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:49 |
| msgid "" |
| "/*************************************************************************\n" |
| " * \"Map\" phase\n" |
| " *\n" |
| " * Divide our data into segments, and apply initial processing\n" |
| " ************************************************************************/" |
| msgstr "" |
| "/*************************************************************************\n" |
| " * \"Map\" 단계\n" |
| " *\n" |
| " * 데이터를 세그먼트로 나누고, 초기 처리를 적용합니다\n" |
| " ************************************************************************/" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:55 |
| msgid "" |
| "// split our data into segments for individual calculation\n" |
| " // each chunk will be a reference (&str) into the actual data\n" |
| msgstr "" |
| "// 개별 계산을 위해 데이터를 세그먼트로 나눕니다.\n" |
| "// 각 덩어리는 실제 데이터에 대한 참조(&str)가 될 것입니다.\n" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:59 |
| msgid "" |
| "// Iterate over the data segments.\n" |
| " // .enumerate() adds the current loop index to whatever is iterated\n" |
| " // the resulting tuple \"(index, element)\" is then immediately\n" |
| " // \"destructured\" into two variables, \"i\" and \"data_segment\" with " |
| "a\n" |
| " // \"destructuring assignment\"\n" |
| msgstr "" |
| "// 데이터 세그먼트들을 순회합니다.\n" |
| "// `.enumerate()`는 순회하는 대상에 현재 루프 인덱스를 추가합니다.\n" |
| "// 결과 튜플 \"(index, element)\"는 \"구조 분해 할당\"\n" |
| "// 을 통해 즉시 두 변수 \"i\"와 \"data_segment\"로 \"구조 분해\"됩니다.\n" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:65 |
| msgid "\"data segment {} is \\\"{}\\\"\"" |
| msgstr "\"데이터 세그먼트 {}는 \\\"{}\\\"입니다\"" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:67 |
| msgid "" |
| "// Process each data segment in a separate thread\n" |
| " //\n" |
| " // spawn() returns a handle to the new thread,\n" |
| " // which we MUST keep to access the returned value\n" |
| " //\n" |
| " // 'move || -> u32' is syntax for a closure that:\n" |
| " // * takes no arguments ('||')\n" |
| " // * takes ownership of its captured variables ('move') and\n" |
| " // * returns an unsigned 32-bit integer ('-> u32')\n" |
| " //\n" |
| " // Rust is smart enough to infer the '-> u32' from\n" |
| " // the closure itself so we could have left that out.\n" |
| " //\n" |
| " // TODO: try removing the 'move' and see what happens\n" |
| msgstr "" |
| "// 각 데이터 세그먼트를 별도의 스레드에서 처리합니다\n" |
| " //\n" |
| " // spawn()은 새 스레드에 대한 핸들을 반환하며,\n" |
| " // 반환된 값에 접근하려면 이 핸들을 반드시 보관해야 합니다\n" |
| " //\n" |
| " // 'move || -> u32'는 다음과 같은 클로저 문법입니다:\n" |
| " // * 인자를 취하지 않음 ('||')\n" |
| " // * 캡처한 변수의 소유권을 가져옴 ('move')\n" |
| " // * 부호 없는 32비트 정수를 반환함 ('-> u32')\n" |
| " //\n" |
| " // Rust는 클로저 자체에서 '-> u32'를 추론할 수 있을 만큼 영리하므로\n" |
| " // 이를 생략할 수도 있었습니다.\n" |
| " //\n" |
| " // TODO: 'move'를 제거해 보고 어떤 일이 일어나는지 확인해 보세요\n" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:82 |
| msgid "// Calculate the intermediate sum of this segment:\n" |
| msgstr "// 이 세그먼트의 중간 합계를 계산합니다:\n" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:84 |
| msgid "// iterate over the characters of our segment..\n" |
| msgstr "// 세그먼트의 문자들을 순회합니다..\n" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:86 |
| msgid "// .. convert text-characters to their number value..\n" |
| msgstr "// .. 텍스트 문자를 숫자 값으로 변환합니다..\n" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:87 |
| msgid "\"should be a digit\"" |
| msgstr "\"숫자여야 합니다\"" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:88 |
| msgid "// .. and sum the resulting iterator of numbers\n" |
| msgstr "// .. 그리고 결과 숫지 이터레이터의 합을 구합니다\n" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:91 |
| msgid "// println! locks stdout, so no text-interleaving occurs\n" |
| msgstr "// println!은 표준 출력을 잠그므로, 텍스트가 서로 섞이지 않습니다\n" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:92 |
| msgid "\"processed segment {}, result={}\"" |
| msgstr "\"세그먼트 {} 처리됨, 결과={}\"" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:94 |
| msgid "" |
| "// \"return\" not needed, because Rust is an \"expression language\", the\n" |
| " // last evaluated expression in each block is automatically its " |
| "value.\n" |
| msgstr "" |
| "// Rust는 \"표현식 언어\"이므로 \"return\"이 필요하지 않습니다.\n" |
| " // 각 블록에서 마지막으로 평가된 표현식이 자동으로 그 값이 됩니" |
| "다.\n" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:102 |
| msgid "" |
| "/*************************************************************************\n" |
| " * \"Reduce\" phase\n" |
| " *\n" |
| " * Collect our intermediate results, and combine them into a final " |
| "result\n" |
| " ************************************************************************/" |
| msgstr "" |
| "/*************************************************************************\n" |
| " * \"Reduce\" 단계\n" |
| " *\n" |
| " * 중간 결과들을 수집하여 최종 결과로 결합합니다\n" |
| " ************************************************************************/" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:108 |
| msgid "" |
| "// combine each thread's intermediate results into a single final sum.\n" |
| " //\n" |
| " // we use the \"turbofish\" ::<> to provide sum() with a type hint.\n" |
| " //\n" |
| " // TODO: try without the turbofish, by instead explicitly\n" |
| " // specifying the type of final_result\n" |
| msgstr "" |
| "// 각 스레드의 중간 결과들을 하나의 최종 합계로 결합합니다.\n" |
| "//\n" |
| "// `sum()`에 타입 힌트를 제공하기 위해 \"터보피쉬(turbofish)\" `::<>`를 사용" |
| "합니다.\n" |
| "//\n" |
| "// TODO: 터보피쉬 대신 `final_result`의 타입을 명시적으로 지정하여 시도해 보" |
| "세요\n" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:116 |
| msgid "\"Final sum result: {}\"" |
| msgstr "\"최종 합계 결과: {}\"" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:120 |
| msgid "Assignments" |
| msgstr "과제" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:122 |
| msgid "" |
| "It is not wise to let our number of threads depend on user inputted data. " |
| "What if the user decides to insert a lot of spaces? Do we _really_ want to " |
| "spawn 2,000 threads? Modify the program so that the data is always chunked " |
| "into a limited number of chunks, defined by a static constant at the " |
| "beginning of the program." |
| msgstr "" |
| "스레드 개수가 사용자 입력 데이터에 의존하게 하는 것은 현명하지 않습니다. 사용" |
| "자가 많은 공백을 삽입하기로 한다면 어떨까요? 정말로 2,000개의 스레드를 생성하" |
| "고 싶으신가요? 프로그램 시작 부분에 정의된 정적 상수에 따라 데이터가 항상 제" |
| "한된 개수의 덩어리로 나뉘도록 프로그램을 수정해 보세요." |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:129 |
| msgid "[Threads](../threads.md)" |
| msgstr "[스레드](../threads.md)" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:130 |
| msgid "[vectors](../../std/vec.md) and [iterators](../../trait/iter.md)" |
| msgstr "[벡터](../../std/vec.md)와 [이터레이터](../../trait/iter.md)" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:131 |
| msgid "" |
| "[closures](../../fn/closures.md), [move](../../scope/move.md) semantics and " |
| "[`move` closures](https://doc.rust-lang.org/book/ch13-01-" |
| "closures.html#closures-can-capture-their-environment)" |
| msgstr "" |
| "[클로저](../../fn/closures.md), [이동(move)](../../scope/move.md) 의미론 및 " |
| "[`move` 클로저](https://doc.rust-lang.org/book/ch13-01-" |
| "closures.html#closures-can-capture-their-environment)" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:132 |
| msgid "" |
| "[destructuring](https://doc.rust-lang.org/book/ch18-03-pattern-" |
| "syntax.html#destructuring-to-break-apart-values) assignments" |
| msgstr "" |
| "[구조 분해(destructuring)](https://doc.rust-lang.org/book/ch18-03-pattern-" |
| "syntax.html#destructuring-to-break-apart-values) 할당" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:133 |
| msgid "" |
| "[turbofish notation](https://doc.rust-lang.org/book/appendix-02-" |
| "operators.html?highlight=turbofish) to help type inference" |
| msgstr "" |
| "타입 추론을 돕기 위한 [터보피쉬 표기법](https://doc.rust-lang.org/book/" |
| "appendix-02-operators.html?highlight=turbofish)" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:134 |
| msgid "[unwrap vs. expect](../../error/option_unwrap.md)" |
| msgstr "[unwrap vs. expect](../../error/option_unwrap.md)" |
| |
| #: src/std_misc/threads/testcase_mapreduce.md:135 |
| msgid "[enumerate](https://doc.rust-lang.org/book/loops.html#enumerate)" |
| msgstr "[enumerate](https://doc.rust-lang.org/book/loops.html#enumerate)" |
| |
| #: src/std_misc/channels.md:3 |
| msgid "" |
| "Rust provides asynchronous `channels` for communication between threads. " |
| "Channels allow a unidirectional flow of information between two end-points: " |
| "the `Sender` and the `Receiver`." |
| msgstr "" |
| "Rust는 스레드 간 통신을 위한 비동기 `채널(channels)`을 제공합니다. 채널은 " |
| "`Sender`와 `Receiver`라는 두 끝점 사이에서 정보의 단방향 흐름을 가능하게 합니" |
| "다." |
| |
| #: src/std_misc/channels.md:15 |
| msgid "" |
| "// Channels have two endpoints: the `Sender<T>` and the `Receiver<T>`,\n" |
| " // where `T` is the type of the message to be transferred\n" |
| " // (type annotation is superfluous)\n" |
| msgstr "" |
| "// 채널에는 두 끝점이 있습니다: `Sender<T>`와 `Receiver<T>`.\n" |
| "// 여기서 `T`는 전송될 메시지의 타입입니다\n" |
| "// (타입 어노테이션은 불필요합니다)\n" |
| |
| #: src/std_misc/channels.md:22 |
| msgid "// The sender endpoint can be copied\n" |
| msgstr "// 발신자(sender) 끝점은 복사될 수 있습니다\n" |
| |
| #: src/std_misc/channels.md:25 |
| msgid "// Each thread will send its id via the channel\n" |
| msgstr "// 각 스레드는 채널을 통해 자신의 id를 보낼 것입니다\n" |
| |
| #: src/std_misc/channels.md:27 |
| msgid "" |
| "// The thread takes ownership over `thread_tx`\n" |
| " // Each thread queues a message in the channel\n" |
| msgstr "" |
| "// 스레드가 `thread_tx`에 대한 소유권을 가져갑니다\n" |
| "// 각 스레드는 채널에 메시지를 큐에 넣습니다\n" |
| |
| #: src/std_misc/channels.md:31 |
| msgid "" |
| "// Sending is a non-blocking operation, the thread will continue\n" |
| " // immediately after sending its message\n" |
| msgstr "" |
| "// 보내기는 비차단(non-blocking) 연산이므로, 스레드는\n" |
| "// 메시지를 보낸 직후 계속 실행됩니다\n" |
| |
| #: src/std_misc/channels.md:33 |
| msgid "\"thread {} finished\"" |
| msgstr "\"{}번 스레드 종료\"" |
| |
| #: src/std_misc/channels.md:39 |
| msgid "// Here, all the messages are collected\n" |
| msgstr "// 여기서 모든 메시지가 수집됩니다\n" |
| |
| #: src/std_misc/channels.md:42 |
| msgid "" |
| "// The `recv` method picks a message from the channel\n" |
| " // `recv` will block the current thread if there are no messages " |
| "available\n" |
| msgstr "" |
| "// `recv` 메서드는 채널에서 메시지를 하나 꺼냅니다\n" |
| "// `recv`는 사용 가능한 메시지가 없으면 현재 스레드를 차단(block)합니다\n" |
| |
| #: src/std_misc/channels.md:47 |
| msgid "// Wait for the threads to complete any remaining work\n" |
| msgstr "// 스레드들이 남은 작업을 모두 완료할 때까지 기다립니다\n" |
| |
| #: src/std_misc/channels.md:49 |
| msgid "\"oops! the child thread panicked\"" |
| msgstr "\"이런! 자식 스레드에서 패닉이 발생했습니다\"" |
| |
| #: src/std_misc/channels.md:52 |
| msgid "// Show the order in which the messages were sent\n" |
| msgstr "// 메시지가 전송된 순서를 보여줍니다\n" |
| |
| #: src/std_misc/path.md:3 |
| msgid "" |
| "The `Path` type represents file paths in the underlying filesystem. Across " |
| "all platforms there is a single `std::path::Path` that abstracts over " |
| "platform-specific path semantics and separators. Bring it into scope with " |
| "`use std::path::Path;` when needed." |
| msgstr "" |
| "`Path` 타입은 기저 파일 시스템의 파일 경로를 나타냅니다. 모든 플랫폼에 걸쳐 " |
| "플랫폼별 경로 의미론과 구분자를 추상화하는 단일 `std::path::Path`가 존재합니" |
| "다. 필요할 때 `use std::path::Path;`를 사용하여 스코프로 가져오세요." |
| |
| #: src/std_misc/path.md:8 |
| msgid "" |
| "A `Path` can be created from an `OsStr`, and provides several methods to get " |
| "information from the file/directory the path points to." |
| msgstr "" |
| "`Path`는 `OsStr`로부터 생성될 수 있으며, 경로가 가리키는 파일/디렉터리로부터 " |
| "정보를 얻기 위한 여러 메서드를 제공합니다." |
| |
| #: src/std_misc/path.md:11 |
| msgid "" |
| "A `Path` is immutable. The owned version of `Path` is `PathBuf`. The " |
| "relation between `Path` and `PathBuf` is similar to that of `str` and " |
| "`String`: a `PathBuf` can be mutated in-place, and can be dereferenced to a " |
| "`Path`." |
| msgstr "" |
| "`Path`는 불변(immutable)입니다. `Path`의 소유형(owned) 버전은 `PathBuf`입니" |
| "다. `Path`와 `PathBuf`의 관계는 `str`과 `String`의 관계와 유사합니다. " |
| "`PathBuf`는 그 자리에서 수정될 수 있으며, `Path`로 역참조(dereference)될 수 " |
| "있습니다." |
| |
| #: src/std_misc/path.md:15 |
| msgid "" |
| "Note that a `Path` is _not_ internally represented as an UTF-8 string, but " |
| "instead is stored as an `OsString`. Therefore, converting a `Path` to a " |
| "`&str` is _not_ free and may fail (an `Option` is returned). However, a " |
| "`Path` can be freely converted to an `OsString` or `&OsStr` using " |
| "`into_os_string` and `as_os_str`, respectively." |
| msgstr "" |
| "`Path`는 내부적으로 UTF-8 문자열로 표현되지 않고, 대신 `OsString`으로 저장됩" |
| "니다. 따라서 `Path`를 `&str`로 변환하는 것은 비용이 들며 실패할 수도 있습니다" |
| "(`Option`이 반환됩니다). 하지만 `Path`는 각각 `into_os_string`과 `as_os_str`" |
| "을 사용하여 `OsString`이나 `&OsStr`로 자유롭게 변환될 수 있습니다." |
| |
| #: src/std_misc/path.md:25 |
| msgid "// Create a `Path` from an `&'static str`\n" |
| msgstr "// &'static str로부터 Path를 생성합니다\n" |
| |
| #: src/std_misc/path.md:26 |
| msgid "\".\"" |
| msgstr "\".\"" |
| |
| #: src/std_misc/path.md:28 |
| msgid "// The `display` method returns a `Display`able structure\n" |
| msgstr "// `display` 메서드는 `Display` 가능한 구조체를 반환합니다\n" |
| |
| #: src/std_misc/path.md:31 |
| msgid "" |
| "// `join` merges a path with a byte container using the OS specific\n" |
| " // separator, and returns a `PathBuf`\n" |
| msgstr "" |
| "// `join`은 OS 전용 구분자를 사용하여 경로를 바이트 컨테이너와 병합하고, " |
| "`PathBuf`를 반환합니다.\n" |
| |
| #: src/std_misc/path.md:35 |
| msgid "// `push` extends the `PathBuf` with a `&Path`\n" |
| msgstr "// `push`는 `PathBuf`를 `&Path`로 확장합니다\n" |
| |
| #: src/std_misc/path.md:37 |
| msgid "\"myfile.tar.gz\"" |
| msgstr "\"myfile.tar.gz\"" |
| |
| #: src/std_misc/path.md:39 |
| msgid "// `set_file_name` updates the file name of the `PathBuf`\n" |
| msgstr "// `set_file_name`은 `PathBuf`의 파일 이름을 업데이트합니다\n" |
| |
| #: src/std_misc/path.md:40 |
| msgid "\"package.tgz\"" |
| msgstr "\"package.tgz\"" |
| |
| #: src/std_misc/path.md:42 |
| msgid "// Convert the `PathBuf` into a string slice\n" |
| msgstr "// `PathBuf`를 문자열 슬라이스로 변환합니다\n" |
| |
| #: src/std_misc/path.md:44 |
| msgid "\"new path is not a valid UTF-8 sequence\"" |
| msgstr "\"새 경로가 유효한 UTF-8 시퀀스가 아닙니다\"" |
| |
| #: src/std_misc/path.md:45 |
| msgid "\"new path is {}\"" |
| msgstr "\"새 경로는 {}입니다\"" |
| |
| #: src/std_misc/path.md:50 |
| msgid "Be sure to check other `Path` methods and the `Metadata` struct." |
| msgstr "다른 `Path` 메서드들과 `Metadata` 구조체도 반드시 확인해 보세요." |
| |
| #: src/std_misc/path.md:54 |
| msgid "" |
| "[OsStr](https://doc.rust-lang.org/std/ffi/struct.OsStr.html) and [Metadata]" |
| "(https://doc.rust-lang.org/std/fs/struct.Metadata.html)." |
| msgstr "" |
| "[OsStr](https://doc.rust-lang.org/std/ffi/struct.OsStr.html)와 [Metadata]" |
| "(https://doc.rust-lang.org/std/fs/struct.Metadata.html)." |
| |
| #: src/std_misc/file.md:3 |
| msgid "" |
| "The `File` struct represents a file that has been opened (it wraps a file " |
| "descriptor), and gives read and/or write access to the underlying file." |
| msgstr "" |
| "`File` 구조체는 열려 있는 파일을 나타내며(파일 디스크립터를 감쌉니다), 기저 " |
| "파일에 대해 읽기 및/또는 쓰기 접근 권한을 제공합니다." |
| |
| #: src/std_misc/file.md:6 |
| msgid "" |
| "Since many things can go wrong when doing file I/O, all the `File` methods " |
| "return the `io::Result<T>` type, which is an alias for `Result<T, " |
| "io::Error>`." |
| msgstr "" |
| "파일 입출력을 수행할 때는 많은 것들이 잘못될 수 있으므로, 모든 `File` 메서드" |
| "는 `Result<T, io::Error>`의 별칭인 `io::Result<T>` 타입을 반환합니다." |
| |
| #: src/std_misc/file.md:9 |
| msgid "" |
| "This makes the failure of all I/O operations _explicit_. Thanks to this, the " |
| "programmer can see all the failure paths, and is encouraged to handle them " |
| "in a proactive manner." |
| msgstr "" |
| "이는 모든 입출력 연산의 실패를 *명시적*으로 만듭니다. 덕분에 프로그래머는 모" |
| "든 실패 경로를 확인할 수 있으며, 이를 적극적인 방식으로 처리하도록 권장됩니" |
| "다." |
| |
| #: src/std_misc/file/open.md:3 |
| msgid "The `open` function can be used to open a file in read-only mode." |
| msgstr "`open` 함수는 파일을 읽기 전용 모드로 여는 데 사용될 수 있습니다." |
| |
| #: src/std_misc/file/open.md:5 |
| msgid "" |
| "A `File` owns a resource, the file descriptor and takes care of closing the " |
| "file when it is `drop`ed." |
| msgstr "" |
| "`File`은 리소스인 파일 디스크립터를 소유하며, `drop`될 때 파일을 닫는 것을 책" |
| "임집니다." |
| |
| #: src/std_misc/file/open.md:14 |
| msgid "// Create a path to the desired file\n" |
| msgstr "// 원하는 파일에 대한 경로를 생성합니다\n" |
| |
| #: src/std_misc/file/open.md:15 |
| msgid "\"hello.txt\"" |
| msgstr "\"hello.txt\"" |
| |
| #: src/std_misc/file/open.md:18 |
| msgid "// Open the path in read-only mode, returns `io::Result<File>`\n" |
| msgstr "// 경로를 읽기 전용 모드로 엽니다. `io::Result<File>`을 반환합니다\n" |
| |
| #: src/std_misc/file/open.md:20 |
| msgid "\"couldn't open {}: {}\"" |
| msgstr "\"{}를 열 수 없습니다: {}\"" |
| |
| #: src/std_misc/file/open.md:24 |
| msgid "// Read the file contents into a string, returns `io::Result<usize>`\n" |
| msgstr "// 파일 내용을 문자열로 읽어옵니다. `io::Result<usize>`를 반환합니다\n" |
| |
| #: src/std_misc/file/open.md:27 |
| msgid "\"couldn't read {}: {}\"" |
| msgstr "\"{}를 읽을 수 없습니다: {}\"" |
| |
| #: src/std_misc/file/open.md:28 |
| msgid "\"{} contains:\\n{}\"" |
| msgstr "\"{}의 내용:\\n{}\"" |
| |
| #: src/std_misc/file/open.md:31 |
| msgid "// `file` goes out of scope, and the \"hello.txt\" file gets closed\n" |
| msgstr "// `file`이 스코프를 벗어나고, \"hello.txt\" 파일이 닫힙니다\n" |
| |
| #: src/std_misc/file/open.md:35 src/std_misc/file/create.md:39 |
| #: src/std_misc/fs.md:108 |
| msgid "Here's the expected successful output:" |
| msgstr "예상되는 성공적인 출력 결과는 다음과 같습니다:" |
| |
| #: src/std_misc/file/open.md:37 |
| msgid "" |
| "```shell\n" |
| "$ echo \"Hello World!\" > hello.txt\n" |
| "$ rustc open.rs && ./open\n" |
| "hello.txt contains:\n" |
| "Hello World!\n" |
| "```" |
| msgstr "" |
| "```shell\n" |
| "$ echo \"Hello World!\" > hello.txt\n" |
| "$ rustc open.rs && ./open\n" |
| "hello.txt의 내용:\n" |
| "Hello World!\n" |
| "```" |
| |
| #: src/std_misc/file/open.md:44 |
| msgid "" |
| "(You are encouraged to test the previous example under different failure " |
| "conditions: `hello.txt` doesn't exist, or `hello.txt` is not readable, etc.)" |
| msgstr "" |
| "(이전 예제를 `hello.txt`가 존재하지 않거나, 읽기 권한이 없는 등 다양한 실패 " |
| "조건에서 테스트해 보시길 권장합니다.)" |
| |
| #: src/std_misc/file/create.md:3 |
| msgid "" |
| "The `create` function opens a file in write-only mode. If the file already " |
| "existed, the old content is destroyed. Otherwise, a new file is created." |
| msgstr "" |
| "`create` 함수는 파일을 쓰기 전용 모드로 엽니다. 파일이 이미 존재한다면 이전 " |
| "내용은 파괴됩니다. 그렇지 않으면 새로운 파일이 생성됩니다." |
| |
| #: src/std_misc/file/create.md:9 |
| msgid "" |
| "\"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n" |
| "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim " |
| "veniam,\n" |
| "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\n" |
| "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse\n" |
| "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat " |
| "non\n" |
| "proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n" |
| "\"" |
| msgstr "" |
| "\"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\n" |
| "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim " |
| "veniam,\n" |
| "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\n" |
| "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse\n" |
| "cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat " |
| "non\n" |
| "proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n" |
| "\"" |
| |
| #: src/std_misc/file/create.md:22 |
| msgid "\"lorem_ipsum.txt\"" |
| msgstr "\"lorem_ipsum.txt\"" |
| |
| #: src/std_misc/file/create.md:25 |
| msgid "// Open a file in write-only mode, returns `io::Result<File>`\n" |
| msgstr "// 파일을 쓰기 전용 모드로 엽니다. `io::Result<File>`을 반환합니다\n" |
| |
| #: src/std_misc/file/create.md:27 |
| msgid "\"couldn't create {}: {}\"" |
| msgstr "\"{}를 생성할 수 없습니다: {}\"" |
| |
| #: src/std_misc/file/create.md:31 |
| msgid "// Write the `LOREM_IPSUM` string to `file`, returns `io::Result<()>`\n" |
| msgstr "" |
| "// `LOREM_IPSUM` 문자열을 `file`에 씁니다. `io::Result<()>`를 반환합니다\n" |
| |
| #: src/std_misc/file/create.md:33 |
| msgid "\"couldn't write to {}: {}\"" |
| msgstr "\"{}에 쓸 수 없습니다: {}\"" |
| |
| #: src/std_misc/file/create.md:34 |
| msgid "\"successfully wrote to {}\"" |
| msgstr "\"{}에 성공적으로 썼습니다\"" |
| |
| #: src/std_misc/file/create.md:54 |
| msgid "" |
| "(As in the previous example, you are encouraged to test this example under " |
| "failure conditions.)" |
| msgstr "" |
| "(이전 예제와 마찬가지로, 이 예제를 실패 조건에서 테스트해 보시길 권장합니다.)" |
| |
| #: src/std_misc/file/create.md:57 |
| msgid "" |
| "The [`OpenOptions`](https://doc.rust-lang.org/std/fs/" |
| "struct.OpenOptions.html) struct can be used to configure how a file is " |
| "opened." |
| msgstr "" |
| "[`OpenOptions`](https://doc.rust-lang.org/std/fs/struct.OpenOptions.html) 구" |
| "조체는 파일이 열리는 방식을 구성하는 데 사용될 수 있습니다." |
| |
| #: src/std_misc/file/read_lines.md:3 |
| msgid "A naive approach" |
| msgstr "단순한 접근 방식" |
| |
| #: src/std_misc/file/read_lines.md:5 |
| msgid "" |
| "This might be a reasonable first attempt for a beginner's first " |
| "implementation for reading lines from a file." |
| msgstr "" |
| "이는 초보자가 파일에서 줄을 읽기 위해 처음 시도해 볼 만한 합리적인 방식일 수 " |
| "있습니다." |
| |
| #: src/std_misc/file/read_lines.md:22 |
| msgid "" |
| "Since the method `lines()` returns an iterator over the lines in the file, " |
| "we can also perform a map inline and collect the results, yielding a more " |
| "concise and fluent expression." |
| msgstr "" |
| "`lines()` 메서드가 파일의 줄들에 대한 이터레이터를 반환하므로, 인라인에서 " |
| "`map`을 수행하고 결과를 `collect`하여 더 간결하고 유려한 표현식을 만들 수도 " |
| "있습니다." |
| |
| #: src/std_misc/file/read_lines.md:31 |
| msgid "// panic on possible file-reading errors\n" |
| msgstr "// 발생 가능한 파일 읽기 에러에 대해 패닉을 일으킵니다\n" |
| |
| #: src/std_misc/file/read_lines.md:32 |
| msgid "// split the string into an iterator of string slices\n" |
| msgstr "// 문자열을 문자열 슬라이스 이터레이터로 분할합니다\n" |
| |
| #: src/std_misc/file/read_lines.md:33 |
| msgid "// make each slice into a string\n" |
| msgstr "// 각 슬라이스를 String으로 만듭니다\n" |
| |
| #: src/std_misc/file/read_lines.md:34 |
| msgid "// gather them together into a vector\n" |
| msgstr "// 이들을 벡터로 모읍니다\n" |
| |
| #: src/std_misc/file/read_lines.md:38 |
| msgid "" |
| "Note that in both examples above, we must convert the `&str` reference " |
| "returned from `lines()` to the owned type `String`, using `.to_string()` and " |
| "`String::from` respectively." |
| msgstr "" |
| "위의 두 예제 모두에서, `lines()`가 반환한 `&str` 참조를 `.to_string()` 또는 " |
| "`String::from`을 사용하여 소유형인 `String`으로 변환해야 한다는 점에 유의하세" |
| "요." |
| |
| #: src/std_misc/file/read_lines.md:42 |
| msgid "A more efficient approach" |
| msgstr "더 효율적인 접근 방식" |
| |
| #: src/std_misc/file/read_lines.md:44 |
| msgid "" |
| "Here we pass ownership of the open `File` to a `BufReader` struct. " |
| "`BufReader` uses an internal buffer to reduce intermediate allocations." |
| msgstr "" |
| "여기서는 열려 있는 `File`의 소유권을 `BufReader` 구조체로 넘깁니다. " |
| "`BufReader`는 내부 버퍼를 사용하여 중간 할당을 줄입니다." |
| |
| #: src/std_misc/file/read_lines.md:47 |
| msgid "" |
| "We also update `read_lines` to return an iterator instead of allocating new " |
| "`String` objects in memory for each line." |
| msgstr "" |
| "또한 각 줄마다 메모리에 새로운 `String` 객체를 할당하는 대신 이터레이터를 반" |
| "환하도록 `read_lines`를 업데이트합니다." |
| |
| #: src/std_misc/file/read_lines.md:56 |
| msgid "// File hosts.txt must exist in the current path\n" |
| msgstr "// hosts.txt 파일이 현재 경로에 존재해야 합니다\n" |
| |
| #: src/std_misc/file/read_lines.md:57 |
| msgid "\"./hosts.txt\"" |
| msgstr "\"./hosts.txt\"" |
| |
| #: src/std_misc/file/read_lines.md:58 |
| msgid "// Consumes the iterator, returns an (Optional) String\n" |
| msgstr "// 이터레이터를 소비하여, (선택적인) String을 반환합니다\n" |
| |
| #: src/std_misc/file/read_lines.md:64 |
| msgid "" |
| "// The output is wrapped in a Result to allow matching on errors.\n" |
| "// Returns an Iterator to the Reader of the lines of the file.\n" |
| msgstr "" |
| "// 에러에 대한 매칭이 가능하도록 출력을 `Result`로 감쌉니다.\n" |
| "// 파일의 각 줄을 읽어오는 이터레이터를 반환합니다.\n" |
| |
| #: src/std_misc/file/read_lines.md:74 |
| msgid "Running this program simply prints the lines individually." |
| msgstr "이 프로그램을 실행하면 단순히 각 줄을 개별적으로 출력합니다." |
| |
| #: src/std_misc/file/read_lines.md:76 |
| msgid "" |
| "```shell\n" |
| "$ echo -e \"127.0.0.1\\n192.168.0.1\\n\" > hosts.txt\n" |
| "$ rustc read_lines.rs && ./read_lines\n" |
| "127.0.0.1\n" |
| "192.168.0.1\n" |
| "```" |
| msgstr "" |
| "```shell\n" |
| "$ echo -e \"127.0.0.1\\n192.168.0.1\\n\" > hosts.txt\n" |
| "$ rustc read_lines.rs && ./read_lines\n" |
| "127.0.0.1\n" |
| "192.168.0.1\n" |
| "```" |
| |
| #: src/std_misc/file/read_lines.md:83 |
| msgid "" |
| "(Note that since `File::open` expects a generic `AsRef<Path>` as argument, " |
| "we define our generic `read_lines()` method with the same generic " |
| "constraint, using the `where` keyword.)" |
| msgstr "" |
| "(`File::open`이 인자로 제네릭 `AsRef<Path>`를 요구하므로, 우리의 제네릭 " |
| "`read_lines()` 메서드도 `where` 키워드를 사용하여 동일한 제네릭 제약 조건을 " |
| "정의한다는 점에 유의하세요.)" |
| |
| #: src/std_misc/file/read_lines.md:86 |
| msgid "" |
| "This process is more efficient than creating a `String` in memory with all " |
| "of the file's contents. This can especially cause performance issues when " |
| "working with larger files." |
| msgstr "" |
| "이 과정은 파일의 모든 내용을 메모리에 `String`으로 생성하는 것보다 효율적입니" |
| "다. 특히 대용량 파일을 다룰 때 메모리에 모두 올리는 방식은 성능 문제를 일으" |
| "킬 수 있습니다." |
| |
| #: src/std_misc/process.md:3 |
| msgid "" |
| "The `process::Output` struct represents the output of a finished child " |
| "process, and the `process::Command` struct is a process builder." |
| msgstr "" |
| "`process::Output` 구조체는 종료된 자식 프로세스의 출력을 나타내며, " |
| "`process::Command` 구조체는 프로세스 빌더입니다." |
| |
| #: src/std_misc/process.md:10 |
| msgid "\"rustc\"" |
| msgstr "\"rustc\"" |
| |
| #: src/std_misc/process.md:11 |
| msgid "\"--version\"" |
| msgstr "\"--version\"" |
| |
| #: src/std_misc/process.md:13 |
| msgid "\"failed to execute process: {}\"" |
| msgstr "\"프로세스 실행 실패: {}\"" |
| |
| #: src/std_misc/process.md:19 |
| msgid "\"rustc succeeded and stdout was:\\n{}\"" |
| msgstr "\"rustc가 성공했으며 표준 출력은 다음과 같습니다:\\n{}\"" |
| |
| #: src/std_misc/process.md:23 |
| msgid "\"rustc failed and stderr was:\\n{}\"" |
| msgstr "\"rustc가 실패했으며 표준 에러는 다음과 같습니다:\\n{}\"" |
| |
| #: src/std_misc/process.md:28 |
| msgid "" |
| "(You are encouraged to try the previous example with an incorrect flag " |
| "passed to `rustc`)" |
| msgstr "" |
| "(이전 예제에서 `rustc`에 잘못된 플래그를 전달하여 시도해 보시길 권장합니다.)" |
| |
| #: src/std_misc/process/pipe.md:3 |
| msgid "" |
| "The `std::process::Child` struct represents a child process, and exposes the " |
| "`stdin`, `stdout` and `stderr` handles for interaction with the underlying " |
| "process via pipes." |
| msgstr "" |
| "`std::process::Child` 구조체는 자식 프로세스를 나타내며, 파이프를 통해 기저 " |
| "프로세스와 상호작용하기 위한 `stdin`, `stdout`, `stderr` 핸들을 노출합니다." |
| |
| #: src/std_misc/process/pipe.md:11 |
| msgid "\"the quick brown fox jumps over the lazy dog\\n\"" |
| msgstr "\"the quick brown fox jumps over the lazy dog\\n\"" |
| |
| #: src/std_misc/process/pipe.md:15 |
| msgid "// Spawn the `wc` command\n" |
| msgstr "// `wc` 명령어를 실행(spawn)합니다\n" |
| |
| #: src/std_misc/process/pipe.md:16 src/std_misc/fs.md:12 src/std_misc/fs.md:73 |
| #: src/std_misc/ffi.md:11 |
| msgid "\"windows\"" |
| msgstr "\"windows\"" |
| |
| #: src/std_misc/process/pipe.md:17 |
| msgid "\"powershell\"" |
| msgstr "\"powershell\"" |
| |
| #: src/std_misc/process/pipe.md:18 |
| msgid "\"-Command\"" |
| msgstr "\"-Command\"" |
| |
| #: src/std_misc/process/pipe.md:18 |
| msgid "\"$input | Measure-Object -Line -Word -Character\"" |
| msgstr "\"$input | Measure-Object -Line -Word -Character\"" |
| |
| #: src/std_misc/process/pipe.md:21 |
| msgid "\"wc\"" |
| msgstr "\"wc\"" |
| |
| #: src/std_misc/process/pipe.md:27 |
| msgid "\"couldn't spawn wc: {}\"" |
| msgstr "\"wc를 실행할 수 없습니다: {}\"" |
| |
| #: src/std_misc/process/pipe.md:31 |
| msgid "" |
| "// Write a string to the `stdin` of `wc`.\n" |
| " //\n" |
| " // `stdin` has type `Option<ChildStdin>`, but since we know this " |
| "instance\n" |
| " // must have one, we can directly `unwrap` it.\n" |
| msgstr "" |
| "// `wc`의 표준 입력(stdin)에 문자열을 씁니다.\n" |
| "//\n" |
| "// `stdin`은 `Option<ChildStdin>` 타입이지만, 이 인스턴스에는 반드시\n" |
| "// 존재한다는 것을 알고 있으므로 직접 `unwrap`할 수 있습니다.\n" |
| |
| #: src/std_misc/process/pipe.md:36 |
| msgid "\"couldn't write to wc stdin: {}\"" |
| msgstr "\"wc의 표준 입력에 쓸 수 없습니다: {}\"" |
| |
| #: src/std_misc/process/pipe.md:37 |
| msgid "\"sent pangram to wc\"" |
| msgstr "\"wc에 팬그램을 보냈습니다\"" |
| |
| #: src/std_misc/process/pipe.md:40 |
| msgid "" |
| "// Because `stdin` does not live after the above calls, it is `drop`ed,\n" |
| " // and the pipe is closed.\n" |
| " //\n" |
| " // This is very important, otherwise `wc` wouldn't start processing the\n" |
| " // input we just sent.\n" |
| msgstr "" |
| "// 위의 호출 이후에는 `stdin`이 더 이상 살아있지 않으므로 `drop`되고,\n" |
| "// 파이프가 닫힙니다.\n" |
| "//\n" |
| "// 이는 매우 중요합니다. 그렇지 않으면 `wc`가 우리가 보낸 입력을\n" |
| "// 처리하기 시작하지 않을 것이기 때문입니다.\n" |
| |
| #: src/std_misc/process/pipe.md:46 |
| msgid "" |
| "// The `stdout` field also has type `Option<ChildStdout>` so must be " |
| "unwrapped.\n" |
| msgstr "" |
| "// `stdout` 필드도 `Option<ChildStdout>` 타입이므로 `unwrap`해야 합니다.\n" |
| |
| #: src/std_misc/process/pipe.md:49 |
| msgid "\"couldn't read wc stdout: {}\"" |
| msgstr "\"wc의 표준 출력을 읽을 수 없습니다: {}\"" |
| |
| #: src/std_misc/process/pipe.md:50 |
| msgid "\"wc responded with:\\n{}\"" |
| msgstr "\"wc의 응답:\\n{}\"" |
| |
| #: src/std_misc/process/wait.md:3 |
| msgid "" |
| "If you'd like to wait for a `process::Child` to finish, you must call " |
| "`Child::wait`, which will return a `process::ExitStatus`." |
| msgstr "" |
| "`process::Child`가 종료될 때까지 기다리려면 `Child::wait`를 호출해야 하며, 이" |
| "는 `process::ExitStatus`를 반환합니다." |
| |
| #: src/std_misc/process/wait.md:10 |
| msgid "\"sleep\"" |
| msgstr "\"sleep\"" |
| |
| #: src/std_misc/process/wait.md:13 |
| msgid "\"reached end of main\"" |
| msgstr "\"메인의 끝에 도달함\"" |
| |
| #: src/std_misc/process/wait.md:18 |
| msgid "" |
| "# `wait` keeps running for 5 seconds until the `sleep 5` command finishes\n" |
| msgstr "# `wait`는 `sleep 5` 명령어가 끝날 때까지 5초 동안 계속 실행됩니다\n" |
| |
| #: src/std_misc/fs.md:3 |
| msgid "" |
| "The `std::fs` module contains several functions that deal with the " |
| "filesystem." |
| msgstr "`std::fs` 모듈은 파일 시스템을 다루는 여러 함수들을 포함하고 있습니다." |
| |
| #: src/std_misc/fs.md:10 src/std_misc/fs.md:68 src/std_misc/ffi.md:20 |
| msgid "\"unix\"" |
| msgstr "\"unix\"" |
| |
| #: src/std_misc/fs.md:15 |
| msgid "// A simple implementation of `% cat path`\n" |
| msgstr "// `% cat path`를 간단히 구현한 것\n" |
| |
| #: src/std_misc/fs.md:25 |
| msgid "// A simple implementation of `% echo s > path`\n" |
| msgstr "// `% echo s > path`를 간단히 구현한 것\n" |
| |
| #: src/std_misc/fs.md:32 |
| msgid "// A simple implementation of `% touch path` (ignores existing files)\n" |
| msgstr "// `% touch path`를 간단히 구현한 것 (기존 파일은 무시함)\n" |
| |
| #: src/std_misc/fs.md:42 |
| msgid "\"`mkdir a`\"" |
| msgstr "\"`mkdir a`\"" |
| |
| #: src/std_misc/fs.md:43 |
| msgid "// Create a directory, returns `io::Result<()>`\n" |
| msgstr "// 디렉터리를 생성합니다. `io::Result<()>`를 반환합니다\n" |
| |
| #: src/std_misc/fs.md:45 src/std_misc/fs.md:52 src/std_misc/fs.md:58 |
| #: src/std_misc/fs.md:63 src/std_misc/fs.md:70 src/std_misc/fs.md:75 |
| #: src/std_misc/fs.md:81 src/std_misc/fs.md:88 src/std_misc/fs.md:97 |
| #: src/std_misc/fs.md:103 |
| msgid "\"! {:?}\"" |
| msgstr "\"! {:?}\"" |
| |
| #: src/std_misc/fs.md:49 |
| msgid "\"`echo hello > a/b.txt`\"" |
| msgstr "\"`echo hello > a/b.txt`\"" |
| |
| #: src/std_misc/fs.md:50 |
| msgid "" |
| "// The previous match can be simplified using the `unwrap_or_else` method\n" |
| msgstr "" |
| "// 이전의 `match`는 `unwrap_or_else` 메서드를 사용하여 단순화될 수 있습니다\n" |
| |
| #: src/std_misc/fs.md:51 |
| msgid "\"a/b.txt\"" |
| msgstr "\"a/b.txt\"" |
| |
| #: src/std_misc/fs.md:55 |
| msgid "\"`mkdir -p a/c/d`\"" |
| msgstr "\"`mkdir -p a/c/d`\"" |
| |
| #: src/std_misc/fs.md:56 |
| msgid "// Recursively create a directory, returns `io::Result<()>`\n" |
| msgstr "// 디렉터리를 재귀적으로 생성합니다. `io::Result<()>`를 반환합니다\n" |
| |
| #: src/std_misc/fs.md:57 src/std_misc/fs.md:102 |
| msgid "\"a/c/d\"" |
| msgstr "\"a/c/d\"" |
| |
| #: src/std_misc/fs.md:61 |
| msgid "\"`touch a/c/e.txt`\"" |
| msgstr "\"`touch a/c/e.txt`\"" |
| |
| #: src/std_misc/fs.md:62 src/std_misc/fs.md:96 |
| msgid "\"a/c/e.txt\"" |
| msgstr "\"a/c/e.txt\"" |
| |
| #: src/std_misc/fs.md:66 |
| msgid "\"`ln -s ../b.txt a/c/b.txt`\"" |
| msgstr "\"`ln -s ../b.txt a/c/b.txt`\"" |
| |
| #: src/std_misc/fs.md:67 |
| msgid "// Create a symbolic link, returns `io::Result<()>`\n" |
| msgstr "// 심볼릭 링크를 생성합니다. `io::Result<()>`를 반환합니다\n" |
| |
| #: src/std_misc/fs.md:69 src/std_misc/fs.md:74 |
| msgid "\"../b.txt\"" |
| msgstr "\"../b.txt\"" |
| |
| #: src/std_misc/fs.md:69 src/std_misc/fs.md:74 src/std_misc/fs.md:80 |
| msgid "\"a/c/b.txt\"" |
| msgstr "\"a/c/b.txt\"" |
| |
| #: src/std_misc/fs.md:79 |
| msgid "\"`cat a/c/b.txt`\"" |
| msgstr "\"`cat a/c/b.txt`\"" |
| |
| #: src/std_misc/fs.md:85 |
| msgid "\"`ls a`\"" |
| msgstr "\"`ls a`\"" |
| |
| #: src/std_misc/fs.md:86 |
| msgid "// Read the contents of a directory, returns `io::Result<Vec<Path>>`\n" |
| msgstr "// 디렉터리의 내용을 읽습니다. `io::Result<Vec<Path>>`를 반환합니다\n" |
| |
| #: src/std_misc/fs.md:94 |
| msgid "\"`rm a/c/e.txt`\"" |
| msgstr "\"`rm a/c/e.txt`\"" |
| |
| #: src/std_misc/fs.md:95 |
| msgid "// Remove a file, returns `io::Result<()>`\n" |
| msgstr "// 파일을 제거합니다. `io::Result<()>`를 반환합니다\n" |
| |
| #: src/std_misc/fs.md:100 |
| msgid "\"`rmdir a/c/d`\"" |
| msgstr "\"`rmdir a/c/d`\"" |
| |
| #: src/std_misc/fs.md:101 |
| msgid "// Remove an empty directory, returns `io::Result<()>`\n" |
| msgstr "// 빈 디렉터리를 제거합니다. `io::Result<()>`를 반환합니다\n" |
| |
| #: src/std_misc/fs.md:110 |
| msgid "" |
| "```shell\n" |
| "$ rustc fs.rs && ./fs\n" |
| "`mkdir a`\n" |
| "`echo hello > a/b.txt`\n" |
| "`mkdir -p a/c/d`\n" |
| "`touch a/c/e.txt`\n" |
| "`ln -s ../b.txt a/c/b.txt`\n" |
| "`cat a/c/b.txt`\n" |
| "> hello\n" |
| "`ls a`\n" |
| "> \"a/b.txt\"\n" |
| "> \"a/c\"\n" |
| "`rm a/c/e.txt`\n" |
| "`rmdir a/c/d`\n" |
| "```" |
| msgstr "" |
| "```shell\n" |
| "$ rustc fs.rs && ./fs\n" |
| "`mkdir a`\n" |
| "`echo hello > a/b.txt`\n" |
| "`mkdir -p a/c/d`\n" |
| "`touch a/c/e.txt`\n" |
| "`ln -s ../b.txt a/c/b.txt`\n" |
| "`cat a/c/b.txt`\n" |
| "> hello\n" |
| "`ls a`\n" |
| "> \"a/b.txt\"\n" |
| "> \"a/c\"\n" |
| "`rm a/c/e.txt`\n" |
| "`rmdir a/c/d`\n" |
| "```" |
| |
| #: src/std_misc/fs.md:126 |
| msgid "And the final state of the `a` directory is:" |
| msgstr "`a` 디렉터리의 최종 상태는 다음과 같습니다:" |
| |
| #: src/std_misc/fs.md:138 |
| msgid "An alternative way to define the function `cat` is with `?` notation:" |
| msgstr "`cat` 함수를 정의하는 또 다른 방법은 `?` 표기법을 사용하는 것입니다:" |
| |
| #: src/std_misc/fs.md:151 |
| msgid "[`cfg!`](../attribute/cfg.md)" |
| msgstr "[`cfg!`](../attribute/cfg.md)" |
| |
| #: src/std_misc/arg.md:3 |
| msgid "Standard Library" |
| msgstr "표준 라이브러리" |
| |
| #: src/std_misc/arg.md:5 |
| msgid "" |
| "The command line arguments can be accessed using `std::env::args`, which " |
| "returns an iterator that yields a `String` for each argument:" |
| msgstr "" |
| "커맨드 라인 인자들은 `std::env::args`를 통해 접근할 수 있으며, 이는 각 인자" |
| "에 대해 `String`을 내놓는 이터레이터를 반환합니다:" |
| |
| #: src/std_misc/arg.md:14 |
| msgid "// The first argument is the path that was used to call the program.\n" |
| msgstr "// 첫 번째 인자는 프로그램을 호출하는 데 사용된 경로입니다.\n" |
| |
| #: src/std_misc/arg.md:15 |
| msgid "\"My path is {}.\"" |
| msgstr "\"제 경로는 {}입니다.\"" |
| |
| #: src/std_misc/arg.md:17 |
| msgid "" |
| "// The rest of the arguments are the passed command line parameters.\n" |
| " // Call the program like this:\n" |
| " // $ ./args arg1 arg2\n" |
| msgstr "" |
| "// 나머지 인자들은 전달된 커맨드 라인 파라미터들입니다.\n" |
| "// 프로그램을 다음과 같이 호출해 보세요:\n" |
| "// $ ./args arg1 arg2\n" |
| |
| #: src/std_misc/arg.md:20 |
| msgid "\"I got {:?} arguments: {:?}.\"" |
| msgstr "\"{}개의 인자를 받았습니다: {:?}.\"" |
| |
| #: src/std_misc/arg.md:24 |
| msgid "" |
| "```shell\n" |
| "$ ./args 1 2 3\n" |
| "My path is ./args.\n" |
| "I got 3 arguments: [\"1\", \"2\", \"3\"].\n" |
| "```" |
| msgstr "" |
| "```shell\n" |
| "$ ./args 1 2 3\n" |
| "제 경로는 ./args입니다.\n" |
| "3개의 인자를 받았습니다: [\"1\", \"2\", \"3\"].\n" |
| "```" |
| |
| #: src/std_misc/arg.md:32 |
| msgid "" |
| "Alternatively, there are numerous crates that can provide extra " |
| "functionality when creating command-line applications. One of the more " |
| "popular command line argument crates being [`clap`](https://rust-" |
| "cli.github.io/book/tutorial/cli-args.html#parsing-cli-arguments-with-clap)." |
| msgstr "" |
| "또는 커맨드 라인 애플리케이션을 만들 때 추가 기능을 제공하는 수많은 크레이트" |
| "들이 있습니다. 가장 인기 있는 커맨드 라인 인자 크레이트 중 하나는 [`clap`]" |
| "(https://rust-cli.github.io/book/tutorial/cli-args.html#parsing-cli-" |
| "arguments-with-clap)입니다." |
| |
| #: src/std_misc/arg/matching.md:3 |
| msgid "Matching can be used to parse simple arguments:" |
| msgstr "`match`를 사용하여 간단한 인자들을 파싱할 수 있습니다:" |
| |
| #: src/std_misc/arg/matching.md:17 |
| msgid "" |
| "\"usage:\n" |
| "match_args <string>\n" |
| " Check whether given string is the answer.\n" |
| "match_args {{increase|decrease}} <integer>\n" |
| " Increase or decrease given integer by one.\"" |
| msgstr "" |
| "\"사용법:\n" |
| "match_args <string>\n" |
| " 주어진 문자열이 정답인지 확인합니다.\n" |
| "match_args {{increase|decrease}} <integer>\n" |
| " 주어진 정수를 1만큼 증가시키거나 감소시킵니다.\"" |
| |
| #: src/std_misc/arg/matching.md:28 |
| msgid "// no arguments passed\n" |
| msgstr "// 전달된 인자가 없음\n" |
| |
| #: src/std_misc/arg/matching.md:30 |
| msgid "\"My name is 'match_args'. Try passing some arguments!\"" |
| msgstr "\"제 이름은 'match_args'입니다. 인자를 전달해 보세요!\"" |
| |
| #: src/std_misc/arg/matching.md:32 |
| msgid "// one argument passed\n" |
| msgstr "// 한 개의 인자가 전달됨\n" |
| |
| #: src/std_misc/arg/matching.md:35 |
| msgid "\"This is the answer!\"" |
| msgstr "\"정답입니다!\"" |
| |
| #: src/std_misc/arg/matching.md:36 |
| msgid "\"This is not the answer.\"" |
| msgstr "\"정답이 아닙니다.\"" |
| |
| #: src/std_misc/arg/matching.md:39 |
| msgid "// one command and one argument passed\n" |
| msgstr "// 하나의 명령어와 하나의 인자가 전달됨\n" |
| |
| #: src/std_misc/arg/matching.md:43 |
| msgid "// parse the number\n" |
| msgstr "// 숫자를 파싱합니다\n" |
| |
| #: src/std_misc/arg/matching.md:49 |
| msgid "\"error: second argument not an integer\"" |
| msgstr "\"에러: 두 번째 인자가 정수가 아닙니다\"" |
| |
| #: src/std_misc/arg/matching.md:54 |
| msgid "// parse the command\n" |
| msgstr "// 명령어를 파싱합니다\n" |
| |
| #: src/std_misc/arg/matching.md:56 |
| msgid "\"increase\"" |
| msgstr "\"increase\"" |
| |
| #: src/std_misc/arg/matching.md:57 |
| msgid "\"decrease\"" |
| msgstr "\"decrease\"" |
| |
| #: src/std_misc/arg/matching.md:59 |
| msgid "\"error: invalid command\"" |
| msgstr "\"에러: 유효하지 않은 명령어\"" |
| |
| #: src/std_misc/arg/matching.md:64 |
| msgid "// all the other cases\n" |
| msgstr "// 그 외의 모든 경우\n" |
| |
| #: src/std_misc/arg/matching.md:66 |
| msgid "// show a help message\n" |
| msgstr "// 도움말 메시지를 표시함\n" |
| |
| #: src/std_misc/arg/matching.md:73 |
| msgid "" |
| "If you named your program `match_args.rs` and compile it like this `rustc " |
| "match_args.rs`, you can execute it as follows:" |
| msgstr "" |
| "프로그램 이름을 `match_args.rs`라고 짓고 `rustc match_args.rs`와 같이 컴파일" |
| "했다면, 다음과 같이 실행할 수 있습니다:" |
| |
| #: src/std_misc/ffi.md:3 |
| msgid "" |
| "Rust provides a Foreign Function Interface (FFI) to C libraries. Foreign " |
| "functions must be declared inside an `extern` block annotated with a " |
| "`#[link]` attribute containing the name of the foreign library." |
| msgstr "" |
| "Rust는 C 라이브러리에 대한 외부 함수 인터페이스(Foreign Function Interface, " |
| "FFI)를 제공합니다. 외부 함수는 외부 라이브러리의 이름이 포함된 `#[link]` 속성" |
| "이 달린 `extern` 블록 내에 선언되어야 합니다." |
| |
| #: src/std_misc/ffi.md:9 |
| msgid "// this extern block links to the libm library\n" |
| msgstr "// 이 extern 블록은 libm 라이브러리에 링크됩니다\n" |
| |
| #: src/std_misc/ffi.md:12 |
| msgid "\"msvcrt\"" |
| msgstr "\"msvcrt\"" |
| |
| #: src/std_misc/ffi.md:14 src/std_misc/ffi.md:23 |
| msgid "" |
| "// this is a foreign function\n" |
| " // that computes the square root of a single precision complex number\n" |
| msgstr "" |
| "// 이는 단정도 복소수의 제곱근을 계산하는\n" |
| "// 외부 함수입니다\n" |
| |
| #: src/std_misc/ffi.md:21 |
| msgid "\"m\"" |
| msgstr "\"m\"" |
| |
| #: src/std_misc/ffi.md:29 |
| msgid "" |
| "// Since calling foreign functions is considered unsafe,\n" |
| "// it's common to write safe wrappers around them.\n" |
| msgstr "" |
| "// 외부 함수를 호출하는 것은 안전하지 않은(unsafe) 것으로 간주되므로,\n" |
| "// 이를 감싸는 안전한 래퍼(wrapper)를 작성하는 것이 일반적입니다.\n" |
| |
| #: src/std_misc/ffi.md:37 |
| msgid "// z = -1 + 0i\n" |
| msgstr "// z = -1 + 0i\n" |
| |
| #: src/std_misc/ffi.md:40 |
| msgid "// calling a foreign function is an unsafe operation\n" |
| msgstr "// 외부 함수를 호출하는 것은 안전하지 않은(unsafe) 작업입니다\n" |
| |
| #: src/std_misc/ffi.md:43 |
| msgid "\"the square root of {:?} is {:?}\"" |
| msgstr "\"{:?}의 제곱근은 {:?}입니다\"" |
| |
| #: src/std_misc/ffi.md:45 |
| msgid "// calling safe API wrapped around unsafe operation\n" |
| msgstr "// unsafe 연산을 감싼 안전한 API 호출\n" |
| |
| #: src/std_misc/ffi.md:46 |
| msgid "\"cos({:?}) = {:?}\"" |
| msgstr "\"cos({:?}) = {:?}\"" |
| |
| #: src/std_misc/ffi.md:48 |
| msgid "// Minimal implementation of single precision complex numbers\n" |
| msgstr "// 단정밀도 복소수의 최소 구현\n" |
| |
| #: src/std_misc/ffi.md:60 |
| msgid "\"{}-{}i\"" |
| msgstr "\"{}-{}i\"" |
| |
| #: src/std_misc/ffi.md:62 |
| msgid "\"{}+{}i\"" |
| msgstr "\"{}+{}i\"" |
| |
| #: src/testing.md:3 |
| msgid "" |
| "Rust is a programming language that cares a lot about correctness and it " |
| "includes support for writing software tests within the language itself." |
| msgstr "" |
| "Rust는 올바름(correctness)을 매우 중요하게 생각하는 프로그래밍 언어이며, 언" |
| "어 자체에서 소프트웨어 테스트 작성을 지원합니다." |
| |
| #: src/testing.md:6 |
| msgid "Testing comes in three styles:" |
| msgstr "테스트는 세 가지 스타일로 제공됩니다:" |
| |
| #: src/testing.md:8 |
| msgid "[Unit](testing/unit_testing.md) testing." |
| msgstr "[유닛(Unit)](testing/unit_testing.md) 테스트." |
| |
| #: src/testing.md:9 |
| msgid "[Doc](testing/doc_testing.md) testing." |
| msgstr "[문서(Doc)](testing/doc_testing.md) 테스트." |
| |
| #: src/testing.md:10 |
| msgid "[Integration](testing/integration_testing.md) testing." |
| msgstr "[통합(Integration)](testing/integration_testing.md) 테스트." |
| |
| #: src/testing.md:12 |
| msgid "Also Rust has support for specifying additional dependencies for tests:" |
| msgstr "또한 Rust는 테스트를 위한 추가 의존성 지정을 지원합니다:" |
| |
| #: src/testing.md:14 |
| msgid "[Dev-dependencies](testing/dev_dependencies.md)" |
| msgstr "[개발 의존성(Dev-dependencies)](testing/dev_dependencies.md)" |
| |
| #: src/testing.md:18 |
| msgid "" |
| "[The Book](https://doc.rust-lang.org/book/ch11-00-testing.html) chapter on " |
| "testing" |
| msgstr "" |
| "테스트에 관한 [The Book](https://doc.rust-lang.org/book/ch11-00-" |
| "testing.html) 장" |
| |
| #: src/testing.md:19 |
| msgid "" |
| "[API Guidelines](https://rust-lang-nursery.github.io/api-guidelines/" |
| "documentation.html) on doc-testing" |
| msgstr "" |
| "문서 테스트(doc-testing)에 관한 [API 가이드라인](https://rust-lang-" |
| "nursery.github.io/api-guidelines/documentation.html)" |
| |
| #: src/testing/unit_testing.md:3 |
| msgid "" |
| "Tests are Rust functions that verify that the non-test code is functioning " |
| "in the expected manner. The bodies of test functions typically perform some " |
| "setup, run the code we want to test, then assert whether the results are " |
| "what we expect." |
| msgstr "" |
| "테스트는 테스트 대상 코드가 예상대로 작동하는지 확인하는 Rust 함수입니다. 테" |
| "스트 함수의 본문은 일반적으로 설정을 수행하고, 테스트하려는 코드를 실행한 다" |
| "음, 결과가 예상과 일치하는지 단언(assert)합니다." |
| |
| #: src/testing/unit_testing.md:8 |
| msgid "" |
| "Most unit tests go into a `tests` [mod](../mod.md) with the `#[cfg(test)]` " |
| "[attribute](../attribute.md). Test functions are marked with the `#[test]` " |
| "attribute." |
| msgstr "" |
| "대부분의 유닛 테스트는 `#[cfg(test)]` [속성](../attribute.md)이 있는 `tests` " |
| "[모듈](../mod.md)에 들어갑니다. 테스트 함수는 `#[test]` 속성으로 표시됩니다." |
| |
| #: src/testing/unit_testing.md:11 |
| msgid "" |
| "Tests fail when something in the test function [panics](../std/panic.md). " |
| "There are some helper [macros](../macros.md):" |
| msgstr "" |
| "테스트 함수 내에서 [패닉](../std/panic.md)이 발생하면 테스트가 실패합니다. 다" |
| "음과 같은 몇 가지 도우미 [매크로](../macros.md)가 있습니다:" |
| |
| #: src/testing/unit_testing.md:14 |
| msgid "`assert!(expression)` - panics if expression evaluates to `false`." |
| msgstr "" |
| "`assert!(expression)` - 표현식의 평가 결과가 `false`이면 패닉을 발생시킵니다." |
| |
| #: src/testing/unit_testing.md:15 |
| msgid "" |
| "`assert_eq!(left, right)` and `assert_ne!(left, right)` - testing left and " |
| "right expressions for equality and inequality respectively." |
| msgstr "" |
| "`assert_eq!(left, right)` 및 `assert_ne!(left, right)` - 왼쪽과 오른쪽 표현식" |
| "이 각각 같은지 또는 다른지를 테스트합니다." |
| |
| #: src/testing/unit_testing.md:22 |
| msgid "" |
| "// This is a really bad adding function, its purpose is to fail in this\n" |
| "// example.\n" |
| msgstr "" |
| "// 이것은 정말 형편없는 더하기 함수입니다. 이 예제에서 실패하도록 만드는 것" |
| "이 목적입니다.\n" |
| |
| #: src/testing/unit_testing.md:32 |
| msgid "" |
| "// Note this useful idiom: importing names from outer (for mod tests) " |
| "scope.\n" |
| msgstr "" |
| "// 이 유용한 관용구를 기억하세요: 외부 스코프(mod tests의 경우)에서 이름들을 " |
| "가져옵니다.\n" |
| |
| #: src/testing/unit_testing.md:42 |
| msgid "" |
| "// This assert would fire and test will fail.\n" |
| " // Please note, that private functions can be tested too!\n" |
| msgstr "" |
| "// 이 단언(assert)은 실행될 것이고 테스트는 실패할 것입니다.\n" |
| " // 참고로, 프라이빗 함수도 테스트할 수 있습니다!\n" |
| |
| #: src/testing/unit_testing.md:49 |
| msgid "Tests can be run with `cargo test`." |
| msgstr "테스트는 `cargo test`로 실행할 수 있습니다." |
| |
| #: src/testing/unit_testing.md:73 |
| msgid "Tests and `?`" |
| msgstr "테스트와 `?`" |
| |
| #: src/testing/unit_testing.md:75 |
| msgid "" |
| "None of the previous unit test examples had a return type. But in Rust 2018, " |
| "your unit tests can return `Result<()>`, which lets you use `?` in them! " |
| "This can make them much more concise." |
| msgstr "" |
| "이전의 유닛 테스트 예제들에는 반환 타입이 없었습니다. 하지만 Rust 2018에서는 " |
| "유닛 테스트가 `Result<()>`를 반환할 수 있어, 테스트 내에서 `?`를 사용할 수 있" |
| "습니다! 이를 통해 테스트를 훨씬 더 간결하게 만들 수 있습니다." |
| |
| #: src/testing/unit_testing.md:84 |
| msgid "\"negative floats don't have square roots\"" |
| msgstr "\"음수 부동 소수점은 제곱근을 가질 수 없습니다\"" |
| |
| #: src/testing/unit_testing.md:101 |
| msgid "" |
| "See [\"The Edition Guide\"](https://doc.rust-lang.org/edition-guide/" |
| "rust-2018/error-handling-and-panics/question-mark-in-main-and-tests.html) " |
| "for more details." |
| msgstr "" |
| "더 자세한 내용은 [\"The Edition Guide\"](https://doc.rust-lang.org/edition-" |
| "guide/rust-2018/error-handling-and-panics/question-mark-in-main-and-" |
| "tests.html)를 참조하세요." |
| |
| #: src/testing/unit_testing.md:103 |
| msgid "Testing panics" |
| msgstr "패닉 테스트" |
| |
| #: src/testing/unit_testing.md:105 |
| msgid "" |
| "To check functions that should panic under certain circumstances, use " |
| "attribute `#[should_panic]`. This attribute accepts optional parameter " |
| "`expected = ` with the text of the panic message. If your function can panic " |
| "in multiple ways, it helps make sure your test is testing the correct panic." |
| msgstr "" |
| "특정 상황에서 패닉이 발생해야 하는 함수를 확인하려면 `#[should_panic]` 속성" |
| "을 사용합니다. 이 속성은 선택적 파라미터 `expected = `를 받으며, 패닉 메시지" |
| "의 텍스트를 확인합니다. 만약 여러분의 함수가 여러 방식으로 패닉을 일으킬 수 " |
| "있다면, 이 파라미터는 예상한 패닉이 발생했는지 확인하는 데 도움이 됩니다." |
| |
| #: src/testing/unit_testing.md:110 |
| msgid "" |
| "**Note**: Rust also allows a shorthand form `#[should_panic = \"message\"]`, " |
| "which works exactly like `#[should_panic(expected = \"message\")]`. Both are " |
| "valid; the latter is more commonly used and is considered more explicit." |
| msgstr "" |
| "**참고**: Rust는 `#[should_panic = \"message\"]`와 같은 단축 형태도 허용하" |
| "며, 이는 `#[should_panic(expected = \"message\")]`와 정확히 똑같이 작동합니" |
| "다. 둘 다 유효하지만, 후자가 더 일반적으로 사용되며 더 명시적인 것으로 간주됩" |
| "니다." |
| |
| #: src/testing/unit_testing.md:117 src/testing/doc_testing.md:46 |
| msgid "\"Divide-by-zero error\"" |
| msgstr "\"0으로 나누기 에러\"" |
| |
| #: src/testing/unit_testing.md:119 src/testing/unit_testing.md:140 |
| #: src/testing/unit_testing.md:146 |
| msgid "\"Divide result is zero\"" |
| msgstr "\"나눗셈 결과가 0입니다\"" |
| |
| #: src/testing/unit_testing.md:146 |
| msgid "// This also works\n" |
| msgstr "// 이 방식도 작동합니다\n" |
| |
| #: src/testing/unit_testing.md:153 |
| msgid "Running these tests gives us:" |
| msgstr "이 테스트들을 실행하면 다음과 같은 결과를 얻습니다:" |
| |
| #: src/testing/unit_testing.md:173 |
| msgid "Running specific tests" |
| msgstr "특정 테스트 실행하기" |
| |
| #: src/testing/unit_testing.md:175 |
| msgid "" |
| "To run specific tests one may specify the test name to `cargo test` command." |
| msgstr "" |
| "특정 테스트를 실행하려면 `cargo test` 명령에 테스트 이름을 지정하면 됩니다." |
| |
| #: src/testing/unit_testing.md:191 |
| msgid "" |
| "To run multiple tests one may specify part of a test name that matches all " |
| "the tests that should be run." |
| msgstr "" |
| "여러 테스트를 실행하려면 실행하려는 모든 테스트와 매칭되는 테스트 이름의 일부" |
| "분을 지정하면 됩니다." |
| |
| #: src/testing/unit_testing.md:210 |
| msgid "Ignoring tests" |
| msgstr "테스트 무시하기" |
| |
| #: src/testing/unit_testing.md:212 |
| msgid "" |
| "Tests can be marked with the `#[ignore]` attribute to exclude some tests. Or " |
| "to run them with command `cargo test -- --ignored`" |
| msgstr "" |
| "일부 테스트를 제외하기 위해 `#[ignore]` 속성을 표시할 수 있습니다. 또는 " |
| "`cargo test -- --ignored` 명령으로 무시된 테스트들만 실행할 수도 있습니다." |
| |
| #: src/testing/doc_testing.md:3 |
| msgid "" |
| "The primary way of documenting a Rust project is through annotating the " |
| "source code. Documentation comments are written in [CommonMark Markdown " |
| "specification](https://commonmark.org/) and support code blocks in them. " |
| "Rust takes care about correctness, so these code blocks are compiled and " |
| "used as documentation tests." |
| msgstr "" |
| "Rust 프로젝트를 문서화하는 기본 방법은 소스 코드에 주석을 다는 것입니다. 문서" |
| "화 주석은 [CommonMark Markdown 명세](https://commonmark.org/)로 작성되며 코" |
| "드 블록을 지원합니다. Rust는 올바름(correctness)을 중요하게 생각하므로, 이러" |
| "한 코드 블록들은 컴파일되어 문서 테스트(documentation tests)로 사용됩니다." |
| |
| #: src/testing/doc_testing.md:10 |
| msgid "" |
| "/// First line is a short summary describing function.\n" |
| "///\n" |
| "/// The next lines present detailed documentation. Code blocks start with\n" |
| "/// triple backquotes and have implicit `fn main()` inside\n" |
| "/// and `extern crate <cratename>`. Assume we're testing a `playground` " |
| "library\n" |
| "/// crate or using the Playground's Test action:\n" |
| "///\n" |
| "/// ```\n" |
| "/// let result = playground::add(2, 3);\n" |
| "/// assert_eq!(result, 5);\n" |
| "/// ```\n" |
| msgstr "" |
| "/// 첫 번째 줄은 함수를 설명하는 짧은 요약입니다.\n" |
| "///\n" |
| "/// 다음 줄들은 상세한 문서화를 보여줍니다. 코드 블록은 백틱 세 개로 시작하" |
| "며,\n" |
| "/// 내부적으로 암시적인 `fn main()`과 `extern crate <cratename>`을 가집니" |
| "다.\n" |
| "/// `playground` 라이브러리 크레이트를 테스트하거나 플레이그라운드의\n" |
| "/// Test 액션을 사용하는 예시라고 가정해 봅시다:\n" |
| "///\n" |
| "/// ```\n" |
| "/// let result = playground::add(2, 3);\n" |
| "/// assert_eq!(result, 5);\n" |
| "/// ```\n" |
| |
| #: src/testing/doc_testing.md:24 |
| msgid "" |
| "/// Usually doc comments may include sections \"Examples\", \"Panics\" and " |
| "\"Failures\".\n" |
| "///\n" |
| "/// The next function divides two numbers.\n" |
| "///\n" |
| "/// # Examples\n" |
| "///\n" |
| "/// ```\n" |
| "/// let result = playground::div(10, 2);\n" |
| "/// assert_eq!(result, 5);\n" |
| "/// ```\n" |
| "///\n" |
| "/// # Panics\n" |
| "///\n" |
| "/// The function panics if the second argument is zero.\n" |
| "///\n" |
| "/// ```rust,should_panic\n" |
| "/// // panics on division by zero\n" |
| "/// playground::div(10, 0);\n" |
| "/// ```\n" |
| msgstr "" |
| "/// 일반적으로 문서 주석에는 \"Examples\", \"Panics\", \"Failures\" 섹션이 포" |
| "함될 수 있습니다.\n" |
| "///\n" |
| "/// 다음 함수는 두 수를 나눕니다.\n" |
| "///\n" |
| "/// # Examples\n" |
| "///\n" |
| "/// ```\n" |
| "/// let result = playground::div(10, 2);\n" |
| "/// assert_eq!(result, 5);\n" |
| "/// ```\n" |
| "///\n" |
| "/// # Panics\n" |
| "///\n" |
| "/// 두 번째 인자가 0이면 함수가 패닉을 발생시킵니다.\n" |
| "///\n" |
| "/// ```rust,should_panic\n" |
| "/// // 0으로 나누기 시 패닉 발생\n" |
| "/// playground::div(10, 0);\n" |
| "/// ```\n" |
| |
| #: src/testing/doc_testing.md:53 |
| msgid "" |
| "Code blocks in documentation are automatically tested when running the " |
| "regular `cargo test` command:" |
| msgstr "" |
| "문서 내의 코드 블록은 일반적인 `cargo test` 명령을 실행할 때 자동으로 테스트" |
| "됩니다:" |
| |
| #: src/testing/doc_testing.md:72 |
| msgid "Motivation behind documentation tests" |
| msgstr "문서 테스트의 의도" |
| |
| #: src/testing/doc_testing.md:74 |
| msgid "" |
| "The main purpose of documentation tests is to serve as examples that " |
| "exercise the functionality, which is one of the most important [guidelines]" |
| "(https://rust-lang-nursery.github.io/api-guidelines/" |
| "documentation.html#examples-use--not-try-not-unwrap-c-question-mark). It " |
| "allows using examples from docs as complete code snippets. But using `?` " |
| "makes compilation fail since `main` returns `unit`. The ability to hide some " |
| "source lines from documentation comes to the rescue: one may write `fn " |
| "try_main() -> Result<(), ErrorType>`, hide it and `unwrap` it in hidden " |
| "`main`. Sounds complicated? Here's an example:" |
| msgstr "" |
| "문서 테스트의 주된 목적은 기능을 실행해보는 예시로서의 역할을 하는 것이며, 이" |
| "는 가장 중요한 [가이드라인](https://rust-lang-nursery.github.io/api-" |
| "guidelines/documentation.html#examples-use--not-try-not-unwrap-c-question-" |
| "mark) 중 하나입니다. 이를 통해 문서의 예시를 완전한 코드 스니펫으로 사용할 " |
| "수 있습니다. 하지만 `main`이 유닛 타입(`unit`)을 반환하기 때문에 `?`를 사용하" |
| "면 컴파일에 실패합니다. 이때 문서에서 일부 소스 라인을 숨길 수 있는 기능이 도" |
| "움이 됩니다. `fn try_main() -> Result<(), ErrorType>`을 작성하고, 이를 숨긴 " |
| "뒤 숨겨진 `main`에서 `unwrap` 할 수 있습니다. 복잡하게 들리나요? 여기 예시가 " |
| "있습니다:" |
| |
| #: src/testing/doc_testing.md:83 |
| msgid "" |
| "/// Using hidden `try_main` in doc tests.\n" |
| "///\n" |
| "/// ```\n" |
| "/// # // hidden lines start with `#` symbol, but they're still compilable!\n" |
| "/// # fn try_main() -> Result<(), String> { // line that wraps the body " |
| "shown in doc\n" |
| "/// let res = playground::try_div(10, 2)?;\n" |
| "/// # Ok(()) // returning from try_main\n" |
| "/// # }\n" |
| "/// # fn main() { // starting main that'll unwrap()\n" |
| "/// # try_main().unwrap(); // calling try_main and unwrapping\n" |
| "/// # // so that test will panic in case of error\n" |
| "/// # }\n" |
| "/// ```\n" |
| msgstr "" |
| "/// 문서 테스트에서 숨겨진 `try_main` 사용하기.\n" |
| "///\n" |
| "/// ```\n" |
| "/// # // `#` 기호로 시작하는 줄은 숨겨지지만, 여전히 컴파일 가능합니다!\n" |
| "/// # fn try_main() -> Result<(), String> { // 문서에 보여지는 본문을 감싸는 " |
| "줄\n" |
| "/// let res = playground::try_div(10, 2)?;\n" |
| "/// # Ok(()) // try_main에서 반환\n" |
| "/// # }\n" |
| "/// # fn main() { // unwrap()을 호출할 main 시작\n" |
| "/// # try_main().unwrap(); // try_main을 호출하고 unwrap하여\n" |
| "/// # // 에러 발생 시 테스트가 패닉을 일으키도록 함\n" |
| "/// # }\n" |
| "/// ```\n" |
| |
| #: src/testing/doc_testing.md:98 |
| msgid "\"Divide-by-zero\"" |
| msgstr "\"0으로 나누기\"" |
| |
| #: src/testing/doc_testing.md:107 |
| msgid "" |
| "[RFC505](https://github.com/rust-lang/rfcs/blob/master/text/0505-api-comment-" |
| "conventions.md) on documentation style" |
| msgstr "" |
| "문서 스타일에 관한 [RFC505](https://github.com/rust-lang/rfcs/blob/master/" |
| "text/0505-api-comment-conventions.md)" |
| |
| #: src/testing/doc_testing.md:108 |
| msgid "" |
| "[API Guidelines](https://rust-lang-nursery.github.io/api-guidelines/" |
| "documentation.html) on documentation guidelines" |
| msgstr "" |
| "문서 가이드라인에 관한 [API 가이드라인](https://rust-lang-nursery.github.io/" |
| "api-guidelines/documentation.html)" |
| |
| #: src/testing/integration_testing.md:3 |
| msgid "" |
| "[Unit tests](unit_testing.md) are testing one module in isolation at a time: " |
| "they're small and can test private code. Integration tests are external to " |
| "your crate and use only its public interface in the same way any other code " |
| "would. Their purpose is to test that many parts of your library work " |
| "correctly together." |
| msgstr "" |
| "[유닛 테스트](unit_testing.md)는 한 번에 하나의 모듈을 격리하여 테스트합니" |
| "다. 유닛 테스트는 크기가 작고 프라이빗 코드도 테스트할 수 있습니다. 통합 테스" |
| "트는 크레이트 외부에 존재하며, 다른 코드와 마찬가지로 공개(public) 인터페이스" |
| "만 사용합니다. 통합 테스트의 목적은 라이브러리의 여러 부분이 함께 올바르게 작" |
| "동하는지 테스트하는 것입니다." |
| |
| #: src/testing/integration_testing.md:8 |
| msgid "Cargo looks for integration tests in `tests` directory next to `src`." |
| msgstr "Cargo는 `src` 옆의 `tests` 디렉터리에서 통합 테스트를 찾습니다." |
| |
| #: src/testing/integration_testing.md:10 src/testing/dev_dependencies.md:17 |
| msgid "File `src/lib.rs`:" |
| msgstr "`src/lib.rs` 파일:" |
| |
| #: src/testing/integration_testing.md:13 |
| msgid "// Define this in a crate called `adder`.\n" |
| msgstr "// `adder`라는 이름의 크레이트에 이를 정의합니다.\n" |
| |
| #: src/testing/integration_testing.md:19 |
| msgid "File with test: `tests/integration_test.rs`:" |
| msgstr "테스트 파일: `tests/integration_test.rs`:" |
| |
| #: src/testing/integration_testing.md:28 |
| msgid "Running tests with `cargo test` command:" |
| msgstr "`cargo test` 명령으로 테스트 실행하기:" |
| |
| #: src/testing/integration_testing.md:50 |
| msgid "" |
| "Each Rust source file in the `tests` directory is compiled as a separate " |
| "crate. In order to share some code between integration tests we can make a " |
| "module with public functions, importing and using it within tests." |
| msgstr "" |
| "통합 테스트 간에 일부 코드를 공유하기 위해 공개 함수가 있는 모듈을 만들고, 이" |
| "를 테스트 내에서 가져와 사용할 수 있습니다." |
| |
| #: src/testing/integration_testing.md:54 |
| msgid "File `tests/common/mod.rs`:" |
| msgstr "`tests/common/mod.rs` 파일:" |
| |
| #: src/testing/integration_testing.md:58 |
| msgid "" |
| "// some setup code, like creating required files/directories, starting\n" |
| " // servers, etc.\n" |
| msgstr "// 필요한 파일/디렉터리 생성, 서버 시작 등과 같은 일부 설정 코드\n" |
| |
| #: src/testing/integration_testing.md:63 |
| msgid "File with test: `tests/integration_test.rs`" |
| msgstr "테스트 파일: `tests/integration_test.rs`" |
| |
| #: src/testing/integration_testing.md:66 |
| msgid "// importing common module.\n" |
| msgstr "// common 모듈 가져오기.\n" |
| |
| #: src/testing/integration_testing.md:71 |
| msgid "// using common code.\n" |
| msgstr "// 공통 코드 사용하기.\n" |
| |
| #: src/testing/integration_testing.md:77 |
| msgid "" |
| "Creating the module as `tests/common.rs` also works, but is not recommended " |
| "because the test runner will treat the file as a test crate and try to run " |
| "tests inside it." |
| msgstr "" |
| "`tests/common.rs`로 모듈을 만드는 것도 가능하지만, 테스트 러너가 이 파일을 테" |
| "스트 크레이트로 취급하여 내부의 테스트를 실행하려 하므로 권장되지 않습니다." |
| |
| #: src/testing/dev_dependencies.md:1 |
| msgid "Development dependencies" |
| msgstr "개발 의존성" |
| |
| #: src/testing/dev_dependencies.md:3 |
| msgid "" |
| "Sometimes there is a need to have dependencies for tests (or examples, or " |
| "benchmarks) only. Such dependencies are added to `Cargo.toml` in the `[dev-" |
| "dependencies]` section. These dependencies are not propagated to other " |
| "packages which depend on this package." |
| msgstr "" |
| "가끔 테스트(또는 예제, 벤치마크)만을 위한 의존성이 필요할 때가 있습니다. 이러" |
| "한 의존성은 `Cargo.toml`의 `[dev-dependencies]` 섹션에 추가됩니다. 이 의존성" |
| "들은 이 패키지에 의존하는 다른 패키지들로는 전파되지 않습니다." |
| |
| #: src/testing/dev_dependencies.md:8 |
| msgid "" |
| "One such example is [`pretty_assertions`](https://docs.rs/pretty_assertions/" |
| "1.0.0/pretty_assertions/index.html), which extends standard `assert_eq!` and " |
| "`assert_ne!` macros, to provide colorful diff. File `Cargo.toml`:" |
| msgstr "" |
| "그러한 예 중 하나로 표준 `assert_eq!` 및 `assert_ne!` 매크로를 확장하여 색상" |
| "화된 diff를 제공하는 [`pretty_assertions`](https://docs.rs/pretty_assertions/" |
| "1.0.0/pretty_assertions/index.html)가 있습니다. `Cargo.toml` 파일:" |
| |
| #: src/testing/dev_dependencies.md:11 |
| msgid "" |
| "```toml\n" |
| "# standard crate data is left out\n" |
| "[dev-dependencies]\n" |
| "pretty_assertions = \"1\"\n" |
| "```" |
| msgstr "" |
| "```toml\n" |
| "# 표준 크레이트 데이터는 생략되었습니다\n" |
| "[dev-dependencies]\n" |
| "pretty_assertions = \"1\"\n" |
| "```" |
| |
| #: src/testing/dev_dependencies.md:27 |
| msgid "// crate for test-only use. Cannot be used in non-test code.\n" |
| msgstr "" |
| "// 테스트 전용으로만 사용되는 크레이트입니다. 테스트가 아닌 코드에서는 사용" |
| "할 수 없습니다.\n" |
| |
| #: src/testing/dev_dependencies.md:38 |
| msgid "" |
| "[Cargo](http://doc.crates.io/specifying-dependencies.html) docs on " |
| "specifying dependencies." |
| msgstr "" |
| "의존성 지정에 관한 [Cargo](http://doc.crates.io/specifying-" |
| "dependencies.html) 문서." |
| |
| #: src/unsafe.md:3 |
| msgid "" |
| "As an introduction to this section, to borrow from [the official docs]" |
| "(https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html), \"one should try " |
| "to minimize the amount of unsafe code in a code base.\" With that in mind, " |
| "let's get started! Unsafe annotations in Rust are used to bypass protections " |
| "put in place by the compiler; specifically, there are four primary things " |
| "that unsafe is used for:" |
| msgstr "" |
| "이 섹션을 시작하며 [공식 문서](https://doc.rust-lang.org/book/ch19-01-unsafe-" |
| "rust.html)의 말을 빌리자면, \"코드베이스에서 unsafe 코드의 양을 최소화하도록 " |
| "노력해야 합니다.\" 이 점을 염두에 두고 시작해 봅시다! Rust에서 Unsafe 어노테" |
| "이션은 컴파일러가 제공하는 보호 기능을 우회하는 데 사용됩니다. 구체적으로, " |
| "unsafe는 다음과 같은 네 가지 주요 작업에 사용됩니다:" |
| |
| #: src/unsafe.md:9 |
| msgid "dereferencing raw pointers" |
| msgstr "raw 포인터 역참조하기" |
| |
| #: src/unsafe.md:10 |
| msgid "" |
| "calling functions or methods which are `unsafe` (including calling a " |
| "function over FFI, see [a previous chapter](std_misc/ffi.md) of the book)" |
| msgstr "" |
| "`unsafe` 함수나 메서드 호출하기 (FFI를 통한 함수 호출 포함, 이 책의 [이전 장]" |
| "(std_misc/ffi.md) 참조)" |
| |
| #: src/unsafe.md:12 |
| msgid "accessing or modifying static mutable variables" |
| msgstr "정적 가변(static mutable) 변수에 접근하거나 수정하기" |
| |
| #: src/unsafe.md:13 |
| msgid "implementing unsafe traits" |
| msgstr "unsafe 트레이트 구현하기" |
| |
| #: src/unsafe.md:15 |
| msgid "Raw Pointers" |
| msgstr "Raw 포인터" |
| |
| #: src/unsafe.md:17 |
| msgid "" |
| "Raw pointers `*` and references `&T` function similarly, but references are " |
| "always safe because they are guaranteed to point to valid data due to the " |
| "borrow checker. Dereferencing a raw pointer can only be done through an " |
| "unsafe block." |
| msgstr "" |
| "Raw 포인터 `*`와 참조 `&T`는 비슷하게 작동하지만, 참조는 빌림 검사기(borrow " |
| "checker) 덕분에 항상 유효한 데이터를 가리킨다는 것이 보장되므로 항상 안전합니" |
| "다. Raw 포인터의 역참조는 unsafe 블록을 통해서만 수행될 수 있습니다." |
| |
| #: src/unsafe.md:32 |
| msgid "Calling Unsafe Functions" |
| msgstr "Unsafe 함수 호출하기" |
| |
| #: src/unsafe.md:34 |
| msgid "" |
| "Some functions can be declared as `unsafe`, meaning it is the programmer's " |
| "responsibility to ensure correctness instead of the compiler's. One example " |
| "of this is [`std::slice::from_raw_parts`](https://doc.rust-lang.org/std/" |
| "slice/fn.from_raw_parts.html) which will create a slice given a pointer to " |
| "the first element and a length." |
| msgstr "" |
| "일부 함수는 `unsafe`로 선언될 수 있는데, 이는 컴파일러 대신 프로그래머가 올바" |
| "름을 보장해야 할 책임이 있음을 의미합니다. 그 예로 첫 번째 요소에 대한 포인터" |
| "와 길이를 받아 슬라이스를 생성하는 [`std::slice::from_raw_parts`](https://" |
| "doc.rust-lang.org/std/slice/fn.from_raw_parts.html)가 있습니다." |
| |
| #: src/unsafe.md:56 |
| msgid "" |
| "For `slice::from_raw_parts`, one of the assumptions which _must_ be upheld " |
| "is that the pointer passed in points to valid memory and that the memory " |
| "pointed to is of the correct type. If these invariants aren't upheld then " |
| "the program's behaviour is undefined and there is no knowing what will " |
| "happen." |
| msgstr "" |
| "`slice::from_raw_parts`의 경우, 반드시 지켜져야 하는 가정 중 하나는 전달된 포" |
| "인터가 유효한 메모리를 가리키고 가리키는 메모리가 올바른 타입이어야 한다는 것" |
| "입니다. 이러한 불변성(invariant)이 지켜지지 않으면 프로그램의 동작은 정의되" |
| "지 않으며 어떤 일이 일어날지 알 수 없습니다." |
| |
| #: src/unsafe/asm.md:3 |
| msgid "" |
| "Rust provides support for inline assembly via the `asm!` macro. It can be " |
| "used to embed handwritten assembly in the assembly output generated by the " |
| "compiler. Generally this should not be necessary, but might be where the " |
| "required performance or timing cannot be otherwise achieved. Accessing low " |
| "level hardware primitives, e.g. in kernel code, may also demand this " |
| "functionality." |
| msgstr "" |
| "Rust는 `asm!` 매크로를 통해 인라인 어셈블리를 지원합니다. 이를 통해 컴파일러" |
| "가 생성하는 어셈블리 출력에 수기로 작성한 어셈블리를 삽입할 수 있습니다. 일반" |
| "적으로 이는 필요하지 않지만, 다른 방법으로는 필요한 성능이나 타이밍을 달성할 " |
| "수 없는 경우에 유용할 수 있습니다. 커널 코드와 같은 저수준 하드웨어 프리미티" |
| "브에 접근하는 경우에도 이 기능이 필요할 수 있습니다." |
| |
| #: src/unsafe/asm.md:8 |
| msgid "" |
| "**Note**: the examples here are given in x86/x86-64 assembly, but other " |
| "architectures are also supported." |
| msgstr "" |
| "**참고**: 여기의 예제들은 x86/x86-64 어셈블리로 제공되지만, 다른 아키텍처도 " |
| "지원됩니다." |
| |
| #: src/unsafe/asm.md:10 |
| msgid "Inline assembly is currently supported on the following architectures:" |
| msgstr "인라인 어셈블리는 현재 다음 아키텍처에서 지원됩니다:" |
| |
| #: src/unsafe/asm.md:12 |
| msgid "x86 and x86-64" |
| msgstr "x86 및 x86-64" |
| |
| #: src/unsafe/asm.md:13 |
| msgid "ARM" |
| msgstr "ARM" |
| |
| #: src/unsafe/asm.md:14 |
| msgid "AArch64" |
| msgstr "AArch64" |
| |
| #: src/unsafe/asm.md:15 |
| msgid "RISC-V" |
| msgstr "RISC-V" |
| |
| #: src/unsafe/asm.md:17 |
| msgid "Basic usage" |
| msgstr "기본 사용법" |
| |
| #: src/unsafe/asm.md:19 |
| msgid "Let us start with the simplest possible example:" |
| msgstr "가장 간단한 예제부터 시작해 봅시다:" |
| |
| #: src/unsafe/asm.md:22 src/unsafe/asm.md:42 src/unsafe/asm.md:69 |
| #: src/unsafe/asm.md:107 src/unsafe/asm.md:124 src/unsafe/asm.md:149 |
| #: src/unsafe/asm.md:183 src/unsafe/asm.md:204 src/unsafe/asm.md:221 |
| #: src/unsafe/asm.md:260 src/unsafe/asm.md:296 src/unsafe/asm.md:312 |
| #: src/unsafe/asm.md:338 src/unsafe/asm.md:376 src/unsafe/asm.md:403 |
| #: src/unsafe/asm.md:427 src/unsafe/asm.md:465 |
| msgid "\"x86_64\"" |
| msgstr "\"x86_64\"" |
| |
| #: src/unsafe/asm.md:26 |
| msgid "\"nop\"" |
| msgstr "\"nop\"" |
| |
| #: src/unsafe/asm.md:31 |
| msgid "" |
| "This will insert a NOP (no operation) instruction into the assembly " |
| "generated by the compiler. Note that all `asm!` invocations have to be " |
| "inside an `unsafe` block, as they could insert arbitrary instructions and " |
| "break various invariants. The instructions to be inserted are listed in the " |
| "first argument of the `asm!` macro as a string literal." |
| msgstr "" |
| "이 코드는 컴파일러가 생성한 어셈블리에 NOP (no operation) 명령어를 삽입합니" |
| "다. `asm!` 호출은 임의의 명령어를 삽입하여 다양한 불변성을 깰 수 있으므로 모" |
| "두 `unsafe` 블록 안에 있어야 한다는 점에 유의하세요. 삽입할 명령어는 `asm!` " |
| "매크로의 첫 번째 인자에 문자열 리터럴로 나열됩니다." |
| |
| #: src/unsafe/asm.md:36 |
| msgid "Inputs and outputs" |
| msgstr "입력과 출력" |
| |
| #: src/unsafe/asm.md:38 |
| msgid "" |
| "Now inserting an instruction that does nothing is rather boring. Let us do " |
| "something that actually acts on data:" |
| msgstr "" |
| "아무것도 하지 않는 명령어를 넣는 것은 꽤 지루합니다. 실제로 데이터에 작용하" |
| "는 무언가를 해봅시다:" |
| |
| #: src/unsafe/asm.md:47 |
| msgid "\"mov {}, 5\"" |
| msgstr "\"mov {}, 5\"" |
| |
| #: src/unsafe/asm.md:53 |
| msgid "" |
| "This will write the value `5` into the `u64` variable `x`. You can see that " |
| "the string literal we use to specify instructions is actually a template " |
| "string. It is governed by the same rules as Rust [format strings](https://" |
| "doc.rust-lang.org/std/fmt/#syntax). The arguments that are inserted into the " |
| "template however look a bit different than you may be familiar with. First " |
| "we need to specify if the variable is an input or an output of the inline " |
| "assembly. In this case it is an output. We declared this by writing `out`. " |
| "We also need to specify in what kind of register the assembly expects the " |
| "variable. In this case we put it in an arbitrary general purpose register by " |
| "specifying `reg`. The compiler will choose an appropriate register to insert " |
| "into the template and will read the variable from there after the inline " |
| "assembly finishes executing." |
| msgstr "" |
| "이 코드는 값 `5`를 `u64` 변수 `x`에 씁니다. 명령어를 지정하는 데 사용하는 문" |
| "자열 리터럴이 실제로는 템플릿 문자열이라는 것을 알 수 있습니다. 이는 Rust [형" |
| "식 문자열](https://doc.rust-lang.org/std/fmt/#syntax)과 동일한 규칙의 적용을 " |
| "받습니다. 하지만 템플릿에 삽입되는 인자들은 여러분에게 익숙한 것과는 조금 달" |
| "라 보일 수 있습니다. 먼저 변수가 인라인 어셈블리의 입력인지 출력인지를 지정해" |
| "야 합니다. 이 경우에는 출력입니다. 우리는 `out`을 작성하여 이를 선언했습니" |
| "다. 또한 어셈블리가 변수를 어떤 종류의 레지스터에 두기를 기대하는지도 지정해" |
| "야 합니다. 이 경우에는 `reg`를 지정하여 임의의 범용 레지스터에 넣었습니다. 컴" |
| "파일러는 템플릿에 삽입할 적절한 레지스터를 선택하고, 인라인 어셈블리 실행이 " |
| "끝난 후 해당 레지스터에서 변수를 읽어올 것입니다." |
| |
| #: src/unsafe/asm.md:66 |
| msgid "Let us see another example that also uses an input:" |
| msgstr "입력을 사용하는 또 다른 예제를 살펴봅시다:" |
| |
| #: src/unsafe/asm.md:76 |
| msgid "\"mov {0}, {1}\"" |
| msgstr "\"mov {0}, {1}\"" |
| |
| #: src/unsafe/asm.md:77 src/unsafe/asm.md:112 src/unsafe/asm.md:130 |
| msgid "\"add {0}, 5\"" |
| msgstr "\"add {0}, 5\"" |
| |
| #: src/unsafe/asm.md:86 |
| msgid "" |
| "This will add `5` to the input in variable `i` and write the result to " |
| "variable `o`. The particular way this assembly does this is first copying " |
| "the value from `i` to the output, and then adding `5` to it." |
| msgstr "" |
| "이 코드는 변수 `i`의 입력에 `5`를 더하고 그 결과를 변수 `o`에 씁니다. 이 어셈" |
| "블리가 이를 수행하는 구체적인 방식은 먼저 `i`의 값을 출력으로 복사한 다음, 거" |
| "기에 `5`를 더하는 것입니다." |
| |
| #: src/unsafe/asm.md:90 |
| msgid "The example shows a few things:" |
| msgstr "이 예제는 몇 가지를 보여줍니다:" |
| |
| #: src/unsafe/asm.md:92 |
| msgid "" |
| "First, we can see that `asm!` allows multiple template string arguments; " |
| "each one is treated as a separate line of assembly code, as if they were all " |
| "joined together with newlines between them. This makes it easy to format " |
| "assembly code." |
| msgstr "" |
| "첫째, `asm!`이 여러 템플릿 문자열 인자를 허용한다는 것을 알 수 있습니다. 각각" |
| "은 별도의 어셈블리 코드 줄로 처리되며, 마치 줄바꿈으로 모두 연결된 것처럼 작" |
| "동합니다. 이를 통해 어셈블리 코드를 쉽게 포맷팅할 수 있습니다." |
| |
| #: src/unsafe/asm.md:97 |
| msgid "" |
| "Second, we can see that inputs are declared by writing `in` instead of `out`." |
| msgstr "" |
| "둘째, `out` 대신 `in`을 작성하여 입력을 선언한다는 것을 알 수 있습니다." |
| |
| #: src/unsafe/asm.md:99 |
| msgid "" |
| "Third, we can see that we can specify an argument number, or name as in any " |
| "format string. For inline assembly templates this is particularly useful as " |
| "arguments are often used more than once. For more complex inline assembly " |
| "using this facility is generally recommended, as it improves readability, " |
| "and allows reordering instructions without changing the argument order." |
| msgstr "" |
| "셋째, 다른 형식 문자열에서처럼 인자 번호나 이름을 지정할 수 있음을 알 수 있습" |
| "니다. 인라인 어셈블리 템플릿에서는 인자가 한 번 이상 사용되는 경우가 많기 때" |
| "문에 이 기능이 특히 유용합니다. 복잡한 인라인 어셈블리의 경우 이 기능을 사용" |
| "하는 것이 일반적으로 권장되는데, 가독성을 높이고 인자 순서를 변경하지 않고도 " |
| "명령어를 재배치할 수 있게 해주기 때문입니다." |
| |
| #: src/unsafe/asm.md:104 |
| msgid "We can further refine the above example to avoid the `mov` instruction:" |
| msgstr "위의 예제를 더 개선하여 `mov` 명령어를 피할 수 있습니다:" |
| |
| #: src/unsafe/asm.md:118 |
| msgid "" |
| "We can see that `inout` is used to specify an argument that is both input " |
| "and output. This is different from specifying an input and output separately " |
| "in that it is guaranteed to assign both to the same register." |
| msgstr "" |
| "`inout`이 입력과 출력 모두로 사용되는 인자를 지정하는 데 사용됨을 알 수 있습" |
| "니다. 이는 입력과 출력을 따로 지정하는 것과 다른데, `inout`은 두 경우 모두 동" |
| "일한 레지스터에 할당됨을 보장하기 때문입니다." |
| |
| #: src/unsafe/asm.md:121 |
| msgid "" |
| "It is also possible to specify different variables for the input and output " |
| "parts of an `inout` operand:" |
| msgstr "" |
| "`inout` 피연산자의 입력과 출력 부분에 대해 서로 다른 변수를 지정하는 것도 가" |
| "능합니다:" |
| |
| #: src/unsafe/asm.md:136 |
| msgid "Late output operands" |
| msgstr "늦은(Late) 출력 피연산자" |
| |
| #: src/unsafe/asm.md:85 |
| msgid "" |
| "The Rust compiler is conservative with its allocation of operands. It is " |
| "assumed that an `out` can be written at any time, and can therefore share " |
| "its location with any other argument. However, to guarantee that the " |
| "compiler will not use the same register for another argument because it is " |
| "still required, use `&mut` operands:" |
| msgstr "" |
| "Rust 컴파일러는 피연산자 할당에 보수적입니다. `out`은 언제든지 쓰일 수 있다" |
| "고 가정되며, 따라서 다른 인자와 위치를 공유할 수 있습니다. 하지만 컴파일러" |
| "가 여전히 필요하다는 이유로 다른 인자에 같은 레지스터를 사용하지 않도록 보장" |
| "하려면 `&mut` 피연산자를 사용하세요:" |
| |
| #: src/unsafe/asm.md:146 |
| msgid "" |
| "Here is an example where `inlateout` _cannot_ be used in `release` mode or " |
| "other optimized cases:" |
| msgstr "" |
| "`release` 모드나 기타 최적화된 경우에 `inlateout`을 사용할 수 _없는_ 예시는 " |
| "다음과 같습니다:" |
| |
| #: src/unsafe/asm.md:157 src/unsafe/asm.md:189 src/unsafe/asm.md:472 |
| msgid "\"add {0}, {1}\"" |
| msgstr "\"add {0}, {1}\"" |
| |
| #: src/unsafe/asm.md:158 |
| msgid "\"add {0}, {2}\"" |
| msgstr "\"add {0}, {2}\"" |
| |
| #: src/unsafe/asm.md:168 |
| msgid "" |
| "In unoptimized cases (e.g. `Debug` mode), replacing `inout(reg) a` with " |
| "`inlateout(reg) a` in the above example can continue to give the expected " |
| "result. However, with `release` mode or other optimized cases, using " |
| "`inlateout(reg) a` can instead lead to the final value `a = 16`, causing the " |
| "assertion to fail." |
| msgstr "" |
| "최적화되지 않은 경우(예: `Debug` 모드), 위 예제에서 `inout(reg) a`를 " |
| "`inlateout(reg) a`로 대체해도 계속해서 예상된 결과를 얻을 수 있습니다. 그러" |
| "나 `release` 모드나 기타 최적화된 경우에는 `inlateout(reg) a`를 사용하면 최" |
| "종 값이 `a = 16`이 되어 단언(assertion)이 실패할 수 있습니다." |
| |
| #: src/unsafe/asm.md:173 |
| msgid "" |
| "This is because in optimized cases, the compiler is free to allocate the " |
| "same register for inputs `b` and `c` since it knows that they have the same " |
| "value. Furthermore, when `inlateout` is used, `a` and `c` could be allocated " |
| "to the same register, in which case the first `add` instruction would " |
| "overwrite the initial load from variable `c`. This is in contrast to how " |
| "using `inout(reg) a` ensures a separate register is allocated for `a`." |
| msgstr "" |
| "이는 최적화된 경우 컴파일러가 입력 `b`와 `c`에 대해 동일한 값을 가지고 있음" |
| "을 알고 있으므로 동일한 레지스터를 할당할 수 있기 때문입니다. 또한 " |
| "`inlateout`이 사용될 때 `a`와 `c`가 동일한 레지스터에 할당될 수 있는데, 이 경" |
| "우 첫 번째 `add` 명령어가 변수 `c`로부터의 초기 로드 값을 덮어쓰게 됩니다. 이" |
| "는 `inout(reg) a`를 사용하여 `a`에 대해 별도의 레지스터가 할당되도록 보장하" |
| "는 것과 대조적입니다." |
| |
| #: src/unsafe/asm.md:179 |
| msgid "" |
| "However, the following example can use `inlateout` since the output is only " |
| "modified after all input registers have been read:" |
| msgstr "" |
| "하지만 다음 예제에서는 모든 입력 레지스터를 읽은 후에만 출력이 수정되므로 " |
| "`inlateout`을 사용할 수 있습니다:" |
| |
| #: src/unsafe/asm.md:195 |
| msgid "" |
| "As you can see, this assembly fragment will still work correctly if `a` and " |
| "`b` are assigned to the same register." |
| msgstr "" |
| "보시다시피, `a`와 `b`가 동일한 레지스터에 할당되더라도 이 어셈블리 조각은 여" |
| "전히 올바르게 작동할 것입니다." |
| |
| #: src/unsafe/asm.md:197 |
| msgid "Explicit register operands" |
| msgstr "명시적 레지스터 피연산자" |
| |
| #: src/unsafe/asm.md:199 |
| msgid "" |
| "Some instructions require that the operands be in a specific register. " |
| "Therefore, Rust inline assembly provides some more specific constraint " |
| "specifiers. While `reg` is generally available on any architecture, explicit " |
| "registers are highly architecture specific. E.g. for x86 the general purpose " |
| "registers `eax`, `ebx`, `ecx`, `edx`, `ebp`, `esi`, and `edi` among others " |
| "can be addressed by their name." |
| msgstr "" |
| "일부 명령어는 피연산자가 특정 레지스터에 있어야 함을 요구합니다. 따라서 Rust " |
| "인라인 어셈블리는 몇 가지 더 구체적인 제약 지정자를 제공합니다. `reg`는 일반" |
| "적으로 모든 아키텍처에서 사용할 수 있지만, 명시적 레지스터는 아키텍처에 따라 " |
| "매우 다릅니다. 예를 들어 x86의 경우 `eax`, `ebx`, `ecx`, `edx`, `ebp`, " |
| "`esi`, `edi` 등의 범용 레지스터를 이름으로 지정할 수 있습니다." |
| |
| #: src/unsafe/asm.md:209 |
| msgid "\"out 0x64, eax\"" |
| msgstr "\"out 0x64, eax\"" |
| |
| #: src/unsafe/asm.md:209 src/unsafe/asm.md:285 |
| msgid "\"eax\"" |
| msgstr "\"eax\"" |
| |
| #: src/unsafe/asm.md:214 |
| msgid "" |
| "In this example we call the `out` instruction to output the content of the " |
| "`cmd` variable to port `0x64`. Since the `out` instruction only accepts " |
| "`eax` (and its sub registers) as operand we had to use the `eax` constraint " |
| "specifier." |
| msgstr "" |
| "이 예제에서는 `out` 명령어를 호출하여 `cmd` 변수의 내용을 포트 `0x64`로 출력" |
| "합니다. `out` 명령어는 `eax` (및 그 하위 레지스터)만을 피연산자로 받아들이므" |
| "로 `eax` 제약 지정자를 사용해야 했습니다." |
| |
| #: src/unsafe/asm.md:216 |
| msgid "" |
| "**Note**: unlike other operand types, explicit register operands cannot be " |
| "used in the template string: you can't use `{}` and should write the " |
| "register name directly instead. Also, they must appear at the end of the " |
| "operand list after all other operand types." |
| msgstr "" |
| "**참고**: 다른 피연산자 타입과 달리 명시적 레지스터 피연산자는 템플릿 문자열" |
| "에서 사용할 수 없습니다. `{}`를 사용할 수 없으며 대신 레지스터 이름을 직접 작" |
| "성해야 합니다. 또한 다른 모든 피연산자 타입 뒤에 피연산자 목록의 마지막에 나" |
| "타나야 합니다." |
| |
| #: src/unsafe/asm.md:218 |
| msgid "Consider this example which uses the x86 `mul` instruction:" |
| msgstr "x86 `mul` 명령어를 사용하는 이 예제를 살펴보세요:" |
| |
| #: src/unsafe/asm.md:230 |
| msgid "" |
| "// The x86 mul instruction takes rax as an implicit input and writes\n" |
| " // the 128-bit result of the multiplication to rax:rdx.\n" |
| " \"mul {}\"" |
| msgstr "" |
| "// x86 mul 명령어는 rax를 암시적 입력으로 받고\n" |
| " // 128비트 곱셈 결과를 rax:rdx에 씁니다.\n" |
| " \"mul {}\"" |
| |
| #: src/unsafe/asm.md:234 src/unsafe/asm.md:356 |
| msgid "\"rax\"" |
| msgstr "\"rax\"" |
| |
| #: src/unsafe/asm.md:235 |
| msgid "\"rdx\"" |
| msgstr "\"rdx\"" |
| |
| #: src/unsafe/asm.md:244 |
| msgid "" |
| "This uses the `mul` instruction to multiply two 64-bit inputs with a 128-bit " |
| "result. The only explicit operand is a register, that we fill from the " |
| "variable `a`. The second operand is implicit, and must be the `rax` " |
| "register, which we fill from the variable `b`. The lower 64 bits of the " |
| "result are stored in `rax` from which we fill the variable `lo`. The higher " |
| "64 bits are stored in `rdx` from which we fill the variable `hi`." |
| msgstr "" |
| "이 코드는 `mul` 명령어를 사용하여 두 개의 64비트 입력을 곱해 128비트 결과를 " |
| "얻습니다. 유일한 명시적 피연산자는 레지스터이며, 변수 `a`로 채웁니다. 두 번" |
| "째 피연산자는 암시적이며 `rax` 레지스터여야 하는데, 이는 변수 `b`로 채웁니" |
| "다. 결과의 하위 64비트는 `rax`에 저장되어 변수 `lo`를 채우고, 상위 64비트는 " |
| "`rdx`에 저장되어 변수 `hi`를 채웁니다." |
| |
| #: src/unsafe/asm.md:250 |
| msgid "Clobbered registers" |
| msgstr "클로버(Clobbered) 레지스터" |
| |
| #: src/unsafe/asm.md:252 |
| msgid "" |
| "In many cases inline assembly will modify state that is not needed as an " |
| "output. Usually this is either because we have to use a scratch register in " |
| "the assembly or because instructions modify state that we don't need to " |
| "further examine. This state is generally referred to as being \"clobbered\". " |
| "We need to tell the compiler about this since it may need to save and " |
| "restore this state around the inline assembly block." |
| msgstr "" |
| "많은 경우 인라인 어셈블리는 출력으로 필요하지 않은 상태를 수정합니다. 보통 어" |
| "셈블리 내에서 스크래치 레지스터를 사용해야 하거나, 명령어가 더 이상 검사할 필" |
| "요가 없는 상태를 수정하기 때문입니다. 이러한 상태를 일반적으로 \"클로버" |
| "(clobbered)\" 되었다고 합니다. 컴파일러가 인라인 어셈블리 블록 전후로 이러한 " |
| "상태를 저장하고 복원해야 할 수도 있으므로 이를 컴파일러에 알려야 합니다." |
| |
| #: src/unsafe/asm.md:262 |
| msgid "// three entries of four bytes each\n" |
| msgstr "// 각각 4바이트인 3개의 엔트리\n" |
| |
| #: src/unsafe/asm.md:264 |
| msgid "" |
| "// String is stored as ascii in ebx, edx, ecx in order\n" |
| " // Because ebx is reserved, the asm needs to preserve the value of it.\n" |
| " // So we push and pop it around the main asm.\n" |
| " // 64 bit mode on 64 bit processors does not allow pushing/popping of\n" |
| " // 32 bit registers (like ebx), so we have to use the extended rbx " |
| "register instead.\n" |
| msgstr "" |
| "// 문자열은 ebx, edx, ecx 순서대로 ASCII로 저장됩니다.\n" |
| " // ebx는 예약되어 있으므로, 어셈블리는 이 값을 보존해야 합니다.\n" |
| " // 따라서 메인 어셈블리 전후로 push와 pop을 수행합니다.\n" |
| " // 64비트 프로세서의 64비트 모드에서는 32비트 레지스터(ebx와 같은)를\n" |
| " // push/pop 하는 것을 허용하지 않으므로, 대신 확장된 rbx 레지스터를 사용" |
| "해야 합니다.\n" |
| |
| #: src/unsafe/asm.md:272 |
| msgid "\"push rbx\"" |
| msgstr "\"push rbx\"" |
| |
| #: src/unsafe/asm.md:273 |
| msgid "\"cpuid\"" |
| msgstr "\"cpuid\"" |
| |
| #: src/unsafe/asm.md:274 |
| msgid "\"mov [rdi], ebx\"" |
| msgstr "\"mov [rdi], ebx\"" |
| |
| #: src/unsafe/asm.md:275 |
| msgid "\"mov [rdi + 4], edx\"" |
| msgstr "\"mov [rdi + 4], edx\"" |
| |
| #: src/unsafe/asm.md:276 |
| msgid "\"mov [rdi + 8], ecx\"" |
| msgstr "\"mov [rdi + 8], ecx\"" |
| |
| #: src/unsafe/asm.md:277 |
| msgid "\"pop rbx\"" |
| msgstr "\"pop rbx\"" |
| |
| #: src/unsafe/asm.md:278 |
| msgid "" |
| "// We use a pointer to an array for storing the values to simplify\n" |
| " // the Rust code at the cost of a couple more asm instructions\n" |
| " // This is more explicit with how the asm works however, as " |
| "opposed\n" |
| " // to explicit register outputs such as `out(\"ecx\") val`\n" |
| " // The *pointer itself* is only an input even though it's " |
| "written behind\n" |
| msgstr "" |
| "// 몇 가지 어셈블리 명령어를 더 사용하는 대신 Rust 코드를 단순화하기 위해\n" |
| " // 값을 저장하는 데 배열 포인터를 사용합니다.\n" |
| " // 하지만 이는 `out(\"ecx\") val`과 같은 명시적 레지스터 출력과" |
| "는 반대로\n" |
| " // 어셈블리가 어떻게 작동하는지 더 명시적으로 보여줍니다.\n" |
| " // *포인터 자체*는 비록 그 뒤에 값이 쓰여지더라도 입력일 뿐입니" |
| "다.\n" |
| |
| #: src/unsafe/asm.md:283 src/unsafe/asm.md:354 |
| msgid "\"rdi\"" |
| msgstr "\"rdi\"" |
| |
| #: src/unsafe/asm.md:284 |
| msgid "// select cpuid 0, also specify eax as clobbered\n" |
| msgstr "// cpuid 0을 선택하고, eax를 클로버된 것으로 지정합니다.\n" |
| |
| #: src/unsafe/asm.md:286 |
| msgid "// cpuid clobbers these registers too\n" |
| msgstr "// cpuid는 이 레지스터들도 클로버합니다.\n" |
| |
| #: src/unsafe/asm.md:287 |
| msgid "\"ecx\"" |
| msgstr "\"ecx\"" |
| |
| #: src/unsafe/asm.md:288 |
| msgid "\"edx\"" |
| msgstr "\"edx\"" |
| |
| #: src/unsafe/asm.md:293 |
| msgid "\"CPU Manufacturer ID: {}\"" |
| msgstr "\"CPU 제조사 ID: {}\"" |
| |
| #: src/unsafe/asm.md:300 |
| msgid "" |
| "In the example above we use the `cpuid` instruction to read the CPU " |
| "manufacturer ID. This instruction writes to `eax` with the maximum supported " |
| "`cpuid` argument and `ebx`, `edx`, and `ecx` with the CPU manufacturer ID as " |
| "ASCII bytes in that order." |
| msgstr "" |
| "위의 예제에서는 `cpuid` 명령어를 사용하여 CPU 제조사 ID를 읽습니다. 이 명령어" |
| "는 `eax`에 지원되는 최대 `cpuid` 인자를 쓰고, `ebx`, `edx`, `ecx` 순서대로 " |
| "CPU 제조사 ID를 ASCII 바이트로 씁니다." |
| |
| #: src/unsafe/asm.md:303 |
| msgid "" |
| "Even though `eax` is never read we still need to tell the compiler that the " |
| "register has been modified so that the compiler can save any values that " |
| "were in these registers before the asm. This is done by declaring it as an " |
| "output but with `_` instead of a variable name, which indicates that the " |
| "output value is to be discarded." |
| msgstr "" |
| "`eax`는 결코 읽히지 않지만, 컴파일러가 어셈블리 이전의 레지스터 값을 저장할 " |
| "수 있도록 레지스터가 수정되었음을 알려야 합니다. 이는 출력으로 선언하되 변수 " |
| "이름 대신 `_`를 사용하여 수행하며, 이는 출력 값을 버림을 나타냅니다." |
| |
| #: src/unsafe/asm.md:305 |
| msgid "" |
| "This code also works around the limitation that `ebx` is a reserved register " |
| "by LLVM. That means that LLVM assumes that it has full control over the " |
| "register and it must be restored to its original state before exiting the " |
| "asm block, so it cannot be used as an input or output **except** if the " |
| "compiler uses it to fulfill a general register class (e.g. `in(reg)`). This " |
| "makes `reg` operands dangerous when using reserved registers as we could " |
| "unknowingly corrupt our input or output because they share the same register." |
| msgstr "" |
| "이 코드는 `ebx`가 LLVM에 의해 예약된 레지스터라는 제한 사항도 해결합니다. 이" |
| "는 LLVM이 해당 레지스터를 완전히 제어한다고 가정하며 어셈블리 블록을 종료하" |
| "기 전에 원래 상태로 복원해야 함을 의미합니다. 따라서 컴파일러가 일반 레지스" |
| "터 클래스(예: `in(reg)`)를 충족하기 위해 사용하는 경우를 **제외**하고는 입력" |
| "이나 출력으로 사용할 수 없습니다. 이로 인해 예약된 레지스터를 사용할 때 " |
| "`reg` 피연산자는 위험할 수 있는데, 동일한 레지스터를 공유하여 자신도 모르게 " |
| "입력이나 출력을 손상시킬 수 있기 때문입니다." |
| |
| #: src/unsafe/asm.md:307 |
| msgid "" |
| "To work around this we use `rdi` to store the pointer to the output array, " |
| "save `ebx` via `push`, read from `ebx` inside the asm block into the array " |
| "and then restore `ebx` to its original state via `pop`. The `push` and `pop` " |
| "use the full 64-bit `rbx` version of the register to ensure that the entire " |
| "register is saved. On 32 bit targets the code would instead use `ebx` in the " |
| "`push`/`pop`." |
| msgstr "" |
| "이를 해결하기 위해 `rdi`를 사용하여 출력 배열에 대한 포인터를 저장하고, " |
| "`push`를 통해 `ebx`를 저장한 후, 어셈블리 블록 내에서 `ebx`로부터 배열로 읽" |
| "어 들인 다음, `pop`을 통해 `ebx`를 원래 상태로 복원합니다. 전체 레지스터가 저" |
| "장되도록 `push`와 `pop`은 레지스터의 64비트 버전인 `rbx`를 사용합니다. 32비" |
| "트 타겟의 경우 코드에서 대신 `ebx`를 `push`/`pop`에 사용할 것입니다." |
| |
| #: src/unsafe/asm.md:309 |
| msgid "" |
| "This can also be used with a general register class to obtain a scratch " |
| "register for use inside the asm code:" |
| msgstr "" |
| "이는 어셈블리 코드 내부에서 사용할 스크래치 레지스터를 얻기 위해 일반 레지스" |
| "터 클래스와 함께 사용될 수도 있습니다." |
| |
| #: src/unsafe/asm.md:314 |
| msgid "// Multiply x by 6 using shifts and adds\n" |
| msgstr "// 시프트와 더하기를 사용하여 x에 6을 곱함\n" |
| |
| #: src/unsafe/asm.md:319 |
| msgid "\"mov {tmp}, {x}\"" |
| msgstr "\"mov {tmp}, {x}\"" |
| |
| #: src/unsafe/asm.md:320 |
| msgid "\"shl {tmp}, 1\"" |
| msgstr "\"shl {tmp}, 1\"" |
| |
| #: src/unsafe/asm.md:321 |
| msgid "\"shl {x}, 2\"" |
| msgstr "\"shl {x}, 2\"" |
| |
| #: src/unsafe/asm.md:322 |
| msgid "\"add {x}, {tmp}\"" |
| msgstr "\"add {x}, {tmp}\"" |
| |
| #: src/unsafe/asm.md:331 |
| msgid "Symbol operands and ABI clobbers" |
| msgstr "심볼 피연산자와 ABI 클로버" |
| |
| #: src/unsafe/asm.md:333 |
| msgid "" |
| "By default, `asm!` assumes that any register not specified as an output will " |
| "have its contents preserved by the assembly code. The [`clobber_abi`]" |
| "(https://doc.rust-lang.org/stable/reference/inline-assembly.html#abi-" |
| "clobbers) argument to `asm!` tells the compiler to automatically insert the " |
| "necessary clobber operands according to the given calling convention ABI: " |
| "any register which is not fully preserved in that ABI will be treated as " |
| "clobbered. Multiple `clobber_abi` arguments may be provided and all " |
| "clobbers from all specified ABIs will be inserted." |
| msgstr "" |
| "기본적으로 `asm!`은 출력으로 지정되지 않은 모든 레지스터의 내용이 어셈블리 코" |
| "드에 의해 보존된다고 가정합니다. `asm!`의 [`clobber_abi`](https://doc.rust-" |
| "lang.org/stable/reference/inline-assembly.html#abi-clobbers) 인자는 컴파일러" |
| "가 주어진 호출 규약 ABI에 따라 필요한 클로버 피연산자를 자동으로 삽입하도록 " |
| "지시합니다. 해당 ABI에서 완전히 보존되지 않는 모든 레지스터는 클로버된 것으" |
| "로 취급됩니다. 여러 `clobber_abi` 인자를 제공할 수 있으며, 지정된 모든 ABI의 " |
| "모든 클로버가 삽입됩니다." |
| |
| #: src/unsafe/asm.md:341 src/unsafe/asm.md:359 |
| msgid "\"C\"" |
| msgstr "\"C\"" |
| |
| #: src/unsafe/asm.md:342 |
| msgid "\"arg = {}\"" |
| msgstr "\"인자 = {}\"" |
| |
| #: src/unsafe/asm.md:350 |
| msgid "\"call {}\"" |
| msgstr "\"call {}\"" |
| |
| #: src/unsafe/asm.md:351 |
| msgid "// Function pointer to call\n" |
| msgstr "// 호출할 함수 포인터\n" |
| |
| #: src/unsafe/asm.md:353 |
| msgid "// 1st argument in rdi\n" |
| msgstr "// 첫 번째 인자는 rdi에\n" |
| |
| #: src/unsafe/asm.md:355 |
| msgid "// Return value in rax\n" |
| msgstr "// 반환 값은 rax에\n" |
| |
| #: src/unsafe/asm.md:357 |
| msgid "" |
| "// Mark all registers which are not preserved by the \"C\" calling\n" |
| " // convention as clobbered.\n" |
| msgstr "" |
| "// \"C\" 호출 규약에 의해 보존되지 않는 모든 레지스터를 클로버된 것으로 표시" |
| "합니다.\n" |
| |
| #: src/unsafe/asm.md:367 |
| msgid "Register template modifiers" |
| msgstr "레지스터 템플릿 수정자" |
| |
| #: src/unsafe/asm.md:369 |
| msgid "" |
| "In some cases, fine control is needed over the way a register name is " |
| "formatted when inserted into the template string. This is needed when an " |
| "architecture's assembly language has several names for the same register, " |
| "each typically being a \"view\" over a subset of the register (e.g. the low " |
| "32 bits of a 64-bit register)." |
| msgstr "" |
| "어떤 경우에는 템플릿 문자열에 삽입될 때 레지스터 이름이 포맷팅되는 방식에 대" |
| "해 세밀한 제어가 필요합니다. 이는 아키텍처의 어셈블리 언어에 동일한 레지스터" |
| "에 대한 여러 이름이 있을 때 필요하며, 각 이름은 일반적으로 레지스터 일부에 대" |
| "한 \"뷰(view)\"입니다(예: 64비트 레지스터의 하위 32비트)." |
| |
| #: src/unsafe/asm.md:371 |
| msgid "" |
| "By default the compiler will always choose the name that refers to the full " |
| "register size (e.g. `rax` on x86-64, `eax` on x86, etc)." |
| msgstr "" |
| "기본적으로 컴파일러는 항상 전체 레지스터 크기를 참조하는 이름을 선택합니다" |
| "(예: x86-64의 `rax`, x86의 `eax` 등)." |
| |
| #: src/unsafe/asm.md:373 |
| msgid "" |
| "This default can be overridden by using modifiers on the template string " |
| "operands, just like you would with format strings:" |
| msgstr "" |
| "이 기본값은 형식 문자열에서처럼 템플릿 문자열 피연산자에 수정자를 사용하여 재" |
| "정의할 수 있습니다." |
| |
| #: src/unsafe/asm.md:382 |
| msgid "\"mov {0:h}, {0:l}\"" |
| msgstr "\"mov {0:h}, {0:l}\"" |
| |
| #: src/unsafe/asm.md:389 |
| msgid "" |
| "In this example, we use the `reg_abcd` register class to restrict the " |
| "register allocator to the 4 legacy x86 registers (`ax`, `bx`, `cx`, `dx`) of " |
| "which the first two bytes can be addressed independently." |
| msgstr "" |
| "이 예제에서는 `reg_abcd` 레지스터 클래스를 사용하여 레지스터 할당자를 처음 " |
| "두 바이트를 독립적으로 주소 지정할 수 있는 4개의 레거시 x86 레지스터(`ax`, " |
| "`bx`, `cx`, `dx`)로 제한합니다." |
| |
| #: src/unsafe/asm.md:391 |
| msgid "" |
| "Let us assume that the register allocator has chosen to allocate `x` in the " |
| "`ax` register. The `h` modifier will emit the register name for the high " |
| "byte of that register and the `l` modifier will emit the register name for " |
| "the low byte. The asm code will therefore be expanded as `mov ah, al` which " |
| "copies the low byte of the value into the high byte." |
| msgstr "" |
| "레지스터 할당자가 `x`를 `ax` 레지스터에 할당하기로 선택했다고 가정해 봅시다. " |
| "`h` 수정자는 해당 레지스터의 상위 바이트에 대한 레지스터 이름을 출력하고, " |
| "`l` 수정자는 하위 바이트에 대한 레지스터 이름을 출력합니다. 따라서 어셈블리 " |
| "코드는 `mov ah, al`로 확장되어 값의 하위 바이트를 상위 바이트로 복사합니다." |
| |
| #: src/unsafe/asm.md:394 |
| msgid "" |
| "If you use a smaller data type (e.g. `u16`) with an operand and forget to " |
| "use template modifiers, the compiler will emit a warning and suggest the " |
| "correct modifier to use." |
| msgstr "" |
| "피연산자와 함께 더 작은 데이터 타입(예: `u16`)을 사용하면서 템플릿 수정자를 " |
| "사용하는 것을 잊은 경우, 컴파일러는 경고를 내보내고 사용할 올바른 수정자를 제" |
| "안합니다." |
| |
| #: src/unsafe/asm.md:396 |
| msgid "Memory address operands" |
| msgstr "메모리 주소 피연산자" |
| |
| #: src/unsafe/asm.md:398 |
| msgid "" |
| "Sometimes assembly instructions require operands passed via memory addresses/" |
| "memory locations. You have to manually use the memory address syntax " |
| "specified by the target architecture. For example, on x86/x86_64 using Intel " |
| "assembly syntax, you should wrap inputs/outputs in `[]` to indicate they are " |
| "memory operands:" |
| msgstr "" |
| "때로는 어셈블리 명령어가 메모리 주소/메모리 위치를 통해 전달되는 피연산자를 " |
| "요구합니다. 타겟 아키텍처에 지정된 메모리 주소 구문을 수동으로 사용해야 합니" |
| "다. 예를 들어, Intel 어셈블리 구문을 사용하는 x86/x86_64에서는 입력/출력을 " |
| "`[]`로 감싸서 메모리 피연산자임을 나타내야 합니다." |
| |
| #: src/unsafe/asm.md:408 |
| msgid "\"fldcw [{}]\"" |
| msgstr "\"fldcw [{}]\"" |
| |
| #: src/unsafe/asm.md:414 |
| msgid "Labels" |
| msgstr "레이블" |
| |
| #: src/unsafe/asm.md:416 |
| msgid "" |
| "Any reuse of a named label, local or otherwise, can result in an assembler " |
| "or linker error or may cause other strange behavior. Reuse of a named label " |
| "can happen in a variety of ways including:" |
| msgstr "" |
| "이름이 지정된 레이블(로컬이든 아니든)을 재사용하면 어셈블러나 링커 오류가 발" |
| "생하거나 기타 이상한 동작이 발생할 수 있습니다. 이름이 지정된 레이블의 재사용" |
| "은 다음과 같은 다양한 방식으로 발생할 수 있습니다." |
| |
| #: src/unsafe/asm.md:418 |
| msgid "" |
| "explicitly: using a label more than once in one `asm!` block, or multiple " |
| "times across blocks." |
| msgstr "" |
| "명시적으로: 하나의 `asm!` 블록에서 레이블을 두 번 이상 사용하거나, 블록 간에 " |
| "여러 번 사용하는 경우." |
| |
| #: src/unsafe/asm.md:419 |
| msgid "" |
| "implicitly via inlining: the compiler is allowed to instantiate multiple " |
| "copies of an `asm!` block, for example when the function containing it is " |
| "inlined in multiple places." |
| msgstr "" |
| "인라이닝을 통한 암시적 방식: 컴파일러는 `asm!` 블록의 여러 복사본을 인스턴스" |
| "화할 수 있습니다. 예를 들어 해당 블록을 포함하는 함수가 여러 위치에서 인라이" |
| "닝되는 경우가 이에 해당합니다." |
| |
| #: src/unsafe/asm.md:420 |
| msgid "" |
| "implicitly via LTO: LTO can cause code from _other crates_ to be placed in " |
| "the same codegen unit, and so could bring in arbitrary labels." |
| msgstr "" |
| "LTO를 통한 암시적 방식: LTO는 _다른 크레이트_의 코드를 동일한 코드 생성 단위" |
| "에 배치할 수 있으며, 이로 인해 임의의 레이블이 유입될 수 있습니다." |
| |
| #: src/unsafe/asm.md:422 |
| msgid "" |
| "As a consequence, you should only use GNU assembler **numeric** [local " |
| "labels](https://sourceware.org/binutils/docs/as/Symbol-Names.html#Local-" |
| "Labels) inside inline assembly code. Defining symbols in assembly code may " |
| "lead to assembler and/or linker errors due to duplicate symbol definitions." |
| msgstr "" |
| "결과적으로, 인라인 어셈블리 코드 내부에서는 GNU 어셈블러 **숫자** [로컬 레이" |
| "블](https://sourceware.org/binutils/docs/as/Symbol-Names.html#Local-Labels)" |
| "만 사용해야 합니다. 어셈블리 코드에서 심볼을 정의하면 심볼 중복 정의로 인해 " |
| "어셈블러 및/또는 링커 오류가 발생할 수 있습니다." |
| |
| #: src/unsafe/asm.md:424 |
| msgid "" |
| "Moreover, on x86 when using the default Intel syntax, due to [an LLVM bug]" |
| "(https://bugs.llvm.org/show_bug.cgi?id=36144), you shouldn't use labels " |
| "exclusively made of `0` and `1` digits, e.g. `0`, `11` or `101010`, as they " |
| "may end up being interpreted as binary values. Using `options(att_syntax)` " |
| "will avoid any ambiguity, but that affects the syntax of the _entire_ `asm!` " |
| "block. (See [Options](#options), below, for more on `options`.)" |
| msgstr "" |
| "또한 x86에서 기본 Intel 구문을 사용할 때, [LLVM 버그](https://bugs.llvm.org/" |
| "show_bug.cgi?id=36144)로 인해 `0`, `11` 또는 `101010`과 같이 `0`과 `1` 숫자로" |
| "만 구성된 레이블은 사용하지 말아야 합니다. 이는 바이너리 값으로 해석될 수 있" |
| "기 때문입니다. `options(att_syntax)`를 사용하면 모호함을 피할 수 있지만, 이" |
| "는 `asm!` 블록 _전체_의 구문에 영향을 미칩니다. (`options`에 대한 자세한 내용" |
| "은 아래의 [옵션](#options) 섹션을 참조하세요.)" |
| |
| #: src/unsafe/asm.md:433 |
| msgid "\"mov {0}, 10\"" |
| msgstr "\"mov {0}, 10\"" |
| |
| #: src/unsafe/asm.md:434 src/unsafe/asm.md:439 |
| msgid "\"2:\"" |
| msgstr "\"2:\"" |
| |
| #: src/unsafe/asm.md:435 |
| msgid "\"sub {0}, 1\"" |
| msgstr "\"sub {0}, 1\"" |
| |
| #: src/unsafe/asm.md:436 |
| msgid "\"cmp {0}, 3\"" |
| msgstr "\"cmp {0}, 3\"" |
| |
| #: src/unsafe/asm.md:437 |
| msgid "\"jle 2f\"" |
| msgstr "\"jle 2f\"" |
| |
| #: src/unsafe/asm.md:438 |
| msgid "\"jmp 2b\"" |
| msgstr "\"jmp 2b\"" |
| |
| #: src/unsafe/asm.md:440 |
| msgid "\"add {0}, 2\"" |
| msgstr "\"add {0}, 2\"" |
| |
| #: src/unsafe/asm.md:448 |
| msgid "" |
| "This will decrement the `{0}` register value from 10 to 3, then add 2 and " |
| "store it in `a`." |
| msgstr "" |
| "이 코드는 `{0}` 레지스터 값을 10에서 3으로 감소시킨 다음, 2를 더하고 그 결과" |
| "를 `a`에 저장합니다." |
| |
| #: src/unsafe/asm.md:450 |
| msgid "This example shows a few things:" |
| msgstr "이 예제는 몇 가지를 보여줍니다:" |
| |
| #: src/unsafe/asm.md:452 |
| msgid "" |
| "First, that the same number can be used as a label multiple times in the " |
| "same inline block." |
| msgstr "" |
| "첫째, 동일한 숫자를 하나의 인라인 블록 내에서 레이블로 여러 번 사용할 수 있습" |
| "니다." |
| |
| #: src/unsafe/asm.md:453 |
| msgid "" |
| "Second, that when a numeric label is used as a reference (as an instruction " |
| "operand, for example), the suffixes “b” (“backward”) or ”f” (“forward”) " |
| "should be added to the numeric label. It will then refer to the nearest " |
| "label defined by this number in this direction." |
| msgstr "" |
| "둘째, 숫자 레이블이 참조(예: 명령어 피연산자)로 사용될 때는 숫자 레이블에 접" |
| "미사 “b” (“backward”, 뒤로) 또는 ”f” (“forward”, 앞으로)를 추가해야 합니다. " |
| "그러면 해당 방향에서 이 숫자로 정의된 가장 가까운 레이블을 참조하게 됩니다." |
| |
| #: src/unsafe/asm.md:458 |
| msgid "Options" |
| msgstr "옵션" |
| |
| #: src/unsafe/asm.md:460 |
| msgid "" |
| "By default, an inline assembly block is treated the same way as an external " |
| "FFI function call with a custom calling convention: it may read/write " |
| "memory, have observable side effects, etc. However, in many cases it is " |
| "desirable to give the compiler more information about what the assembly code " |
| "is actually doing so that it can optimize better." |
| msgstr "" |
| "기본적으로 인라인 어셈블리 블록은 커스텀 호출 규약을 사용하는 외부 FFI 함수 " |
| "호출과 동일하게 취급됩니다. 즉, 메모리를 읽거나 쓰고, 관찰 가능한 부수 효과" |
| "가 있을 수 있다고 가정합니다. 하지만 많은 경우 컴파일러가 더 나은 최적화를 수" |
| "행할 수 있도록 어셈블리 코드가 실제로 무엇을 하는지에 대한 더 많은 정보를 제" |
| "공하는 것이 바람직합니다." |
| |
| #: src/unsafe/asm.md:462 |
| msgid "Let's take our previous example of an `add` instruction:" |
| msgstr "이전의 `add` 명령어 예제를 다시 살펴봅시다:" |
| |
| #: src/unsafe/asm.md:481 |
| msgid "" |
| "Options can be provided as an optional final argument to the `asm!` macro. " |
| "We specified three options here:" |
| msgstr "" |
| "옵션은 `asm!` 매크로의 선택적인 마지막 인자로 제공될 수 있습니다. 여기서는 " |
| "세 가지 옵션을 지정했습니다:" |
| |
| #: src/unsafe/asm.md:483 |
| msgid "" |
| "`pure` means that the asm code has no observable side effects and that its " |
| "output depends only on its inputs. This allows the compiler optimizer to " |
| "call the inline asm fewer times or even eliminate it entirely." |
| msgstr "" |
| "`pure`는 어셈블리 코드가 관찰 가능한 부수 효과가 없으며 출력이 입력에만 의존" |
| "함을 의미합니다. 이를 통해 컴파일러 최적화 프로그램은 인라인 어셈블리를 더 적" |
| "게 호출하거나 아예 제거할 수 있습니다." |
| |
| #: src/unsafe/asm.md:484 |
| msgid "" |
| "`nomem` means that the asm code does not read or write to memory. By default " |
| "the compiler will assume that inline assembly can read or write any memory " |
| "address that is accessible to it (e.g. through a pointer passed as an " |
| "operand, or a global)." |
| msgstr "" |
| "`nomem`은 어셈블리 코드가 메모리를 읽거나 쓰지 않음을 의미합니다. 기본적으로 " |
| "컴파일러는 인라인 어셈블리가 접근 가능한 모든 메모리 주소(예: 피연산자로 전달" |
| "된 포인터나 전역 변수를 통해)를 읽거나 쓸 수 있다고 가정합니다." |
| |
| #: src/unsafe/asm.md:485 |
| msgid "" |
| "`nostack` means that the asm code does not push any data onto the stack. " |
| "This allows the compiler to use optimizations such as the stack red zone on " |
| "x86-64 to avoid stack pointer adjustments." |
| msgstr "" |
| "`nostack`은 어셈블리 코드가 스택에 어떤 데이터도 푸시하지 않음을 의미합니다. " |
| "이를 통해 컴파일러는 x86-64의 스택 레드 존(stack red zone)과 같은 최적화를 사" |
| "용하여 스택 포인터 조정을 피할 수 있습니다." |
| |
| #: src/unsafe/asm.md:487 |
| msgid "" |
| "These allow the compiler to better optimize code using `asm!`, for example " |
| "by eliminating pure `asm!` blocks whose outputs are not needed." |
| msgstr "" |
| "이러한 옵션들은 컴파일러가 `asm!`을 사용하는 코드를 더 잘 최적화할 수 있게 해" |
| "줍니다. 예를 들어 출력이 필요하지 않은 순수(pure) `asm!` 블록을 제거할 수 있" |
| "습니다." |
| |
| #: src/unsafe/asm.md:489 |
| msgid "" |
| "See the [reference](https://doc.rust-lang.org/stable/reference/inline-" |
| "assembly.html) for the full list of available options and their effects." |
| msgstr "" |
| "사용 가능한 전체 옵션 목록과 그 효과에 대해서는 [레퍼런스](https://doc.rust-" |
| "lang.org/stable/reference/inline-assembly.html)를 참조하세요." |
| |
| #: src/compatibility.md:3 |
| msgid "" |
| "The Rust language is evolving rapidly, and because of this certain " |
| "compatibility issues can arise, despite efforts to ensure forwards-" |
| "compatibility wherever possible." |
| msgstr "" |
| "Rust 언어는 빠르게 진화하고 있으며, 이로 인해 가능한 한 전방 호환성을 보장하" |
| "려는 노력에도 불구하고 특정 호환성 문제가 발생할 수 있습니다." |
| |
| #: src/compatibility.md:7 |
| msgid "[Raw identifiers](compatibility/raw_identifiers.md)" |
| msgstr "[Raw 식별자](compatibility/raw_identifiers.md)" |
| |
| #: src/compatibility/raw_identifiers.md:3 |
| msgid "" |
| "Rust, like many programming languages, has the concept of \"keywords\". " |
| "These identifiers mean something to the language, and so you cannot use them " |
| "in places like variable names, function names, and other places. Raw " |
| "identifiers let you use keywords where they would not normally be allowed. " |
| "This is particularly useful when Rust introduces new keywords, and a library " |
| "using an older edition of Rust has a variable or function with the same name " |
| "as a keyword introduced in a newer edition." |
| msgstr "" |
| "Rust는 많은 프로그래밍 언어와 마찬가지로 \"키워드\"라는 개념이 있습니다. 이러" |
| "한 식별자들은 언어에 의미가 있으므로 변수 이름, 함수 이름 등에서 사용할 수 없" |
| "습니다. Raw 식별자를 사용하면 일반적으로 허용되지 않는 위치에서 키워드를 사용" |
| "할 수 있습니다. 이는 특히 Rust가 새로운 키워드를 도입하고, 이전 에디션의 Rust" |
| "를 사용하는 라이브러리에 최신 에디션에서 도입된 키워드와 동일한 이름의 변수" |
| "나 함수가 있을 때 유용합니다." |
| |
| #: src/compatibility/raw_identifiers.md:11 |
| msgid "" |
| "For example, consider a crate `foo` compiled with the 2015 edition of Rust " |
| "that exports a function named `try`. This keyword is reserved for a new " |
| "feature in the 2018 edition, so without raw identifiers, we would have no " |
| "way to name the function." |
| msgstr "" |
| "예를 들어, 2015 에디션 Rust로 컴파일된 `foo` 크레이트가 `try`라는 이름의 함수" |
| "를 내보낸다고 가정해 봅시다. 이 키워드는 2018 에디션의 새로운 기능을 위해 예" |
| "약되어 있으므로, Raw 식별자가 없다면 함수 이름을 지을 방법이 없을 것입니다." |
| |
| #: src/compatibility/raw_identifiers.md:24 |
| msgid "You'll get this error:" |
| msgstr "다음과 같은 오류가 발생합니다:" |
| |
| #: src/compatibility/raw_identifiers.md:34 |
| msgid "You can write this with a raw identifier:" |
| msgstr "Raw 식별자를 사용하여 다음과 같이 작성할 수 있습니다:" |
| |
| #: src/meta.md:3 |
| msgid "" |
| "Some topics aren't exactly relevant to how you program runs but provide you " |
| "tooling or infrastructure support which just makes things better for " |
| "everyone. These topics include:" |
| msgstr "" |
| "일부 주제는 프로그램의 실행 방식과 직접적인 관련은 없지만, 모든 사람에게 도움" |
| "이 되는 도구 또는 인프라 지원을 제공합니다. 이러한 주제는 다음과 같습니다." |
| |
| #: src/meta.md:7 |
| msgid "" |
| "[Documentation](meta/doc.md): Generate library documentation for users via " |
| "the included `rustdoc`." |
| msgstr "" |
| "[문서화](meta/doc.md): 포함된 `rustdoc`을 통해 사용자를 위한 라이브러리 문서" |
| "를 생성합니다." |
| |
| #: src/meta.md:9 |
| msgid "" |
| "[Playground](meta/playground.md): Integrate the Rust Playground in your " |
| "documentation." |
| msgstr "" |
| "[플레이그라운드](meta/playground.md): 문서에 Rust 플레이그라운드를 통합합니" |
| "다." |
| |
| #: src/meta/doc.md:3 |
| msgid "" |
| "Use `cargo doc` to build documentation in `target/doc`, `cargo doc --open` " |
| "will automatically open it in your web browser." |
| msgstr "" |
| "`target/doc`에 문서를 빌드하려면 `cargo doc`을 사용하세요. `cargo doc --open`" |
| "은 웹 브라우저에서 문서를 자동으로 엽니다." |
| |
| #: src/meta/doc.md:6 |
| msgid "" |
| "Use `cargo test` to run all tests (including documentation tests), and " |
| "`cargo test --doc` to only run documentation tests." |
| msgstr "" |
| "모든 테스트(문서 테스트 포함)를 실행하려면 `cargo test`를, 문서 테스트만 실행" |
| "하려면 `cargo test --doc`을 사용하세요." |
| |
| #: src/meta/doc.md:9 |
| msgid "" |
| "These commands will appropriately invoke `rustdoc` (and `rustc`) as required." |
| msgstr "" |
| "이러한 명령어들은 필요에 따라 `rustdoc`(및 `rustc`)을 적절히 호출합니다." |
| |
| #: src/meta/doc.md:11 |
| msgid "Doc comments" |
| msgstr "문서 주석" |
| |
| #: src/meta/doc.md:13 |
| msgid "" |
| "Doc comments are very useful for big projects that require documentation. " |
| "When running `rustdoc`, these are the comments that get compiled into " |
| "documentation. They are denoted by a `///`, and support [Markdown](https://" |
| "en.wikipedia.org/wiki/Markdown)." |
| msgstr "" |
| "문서 주석은 문서화가 필요한 큰 프로젝트에 매우 유용합니다. `rustdoc`을 실행" |
| "할 때, 이 주석들이 문서로 컴파일됩니다. 이들은 `///`로 표시되며 [Markdown]" |
| "(https://en.wikipedia.org/wiki/Markdown)을 지원합니다." |
| |
| #: src/meta/doc.md:18 |
| msgid "\"doc\"" |
| msgstr "\"doc\"" |
| |
| #: src/meta/doc.md:19 |
| msgid "/// A human being is represented here\n" |
| msgstr "/// 여기에 사람(human being)이 표현됩니다.\n" |
| |
| #: src/meta/doc.md:22 |
| msgid "/// A person must have a name, no matter how much Juliet may hate it\n" |
| msgstr "/// 줄리엣이 아무리 싫어하더라도 사람은 이름을 가져야 합니다.\n" |
| |
| #: src/meta/doc.md:27 |
| msgid "" |
| "/// Creates a person with the given name.\n" |
| " ///\n" |
| " /// # Examples\n" |
| " ///\n" |
| " /// ```\n" |
| " /// // You can have rust code between fences inside the comments\n" |
| " /// // If you pass --test to `rustdoc`, it will even test it for you!\n" |
| " /// use doc::Person;\n" |
| " /// let person = Person::new(\"name\");\n" |
| " /// ```\n" |
| msgstr "" |
| "/// 주어진 이름으로 사람을 생성합니다.\n" |
| " ///\n" |
| " /// # Examples\n" |
| " ///\n" |
| " /// ```\n" |
| " /// // 주석 내부의 울타리(fence) 사이에 Rust 코드를 넣을 수 있습니다.\n" |
| " /// // `rustdoc`에 --test를 전달하면, 코드 테스트까지 해줍니다!\n" |
| " /// use doc::Person;\n" |
| " /// let person = Person::new(\"name\");\n" |
| " /// ```\n" |
| |
| #: src/meta/doc.md:43 |
| msgid "" |
| "/// Gives a friendly hello!\n" |
| " ///\n" |
| " /// Says \"Hello, [name](Person::name)\" to the `Person` it is called " |
| "on.\n" |
| msgstr "" |
| "/// 친절하게 인사합니다!\n" |
| " ///\n" |
| " /// 호출된 `Person`의 이름을 사용하여 \"안녕, [name](Person::name)\"이라" |
| "고 말합니다.\n" |
| |
| #: src/meta/doc.md:47 |
| msgid "\"Hello, {}!\"" |
| msgstr "\"안녕, {}!\"" |
| |
| #: src/meta/doc.md:52 |
| msgid "\"John\"" |
| msgstr "\"존\"" |
| |
| #: src/meta/doc.md:58 |
| msgid "" |
| "To run the tests, first build the code as a library, then tell `rustdoc` " |
| "where to find the library so it can link it into each doctest program:" |
| msgstr "" |
| "테스트를 실행하려면 먼저 코드를 라이브러리로 빌드한 다음, `rustdoc`이 각 문" |
| "서 테스트 프로그램에 링크할 수 있도록 라이브러리 위치를 알려주어야 합니다." |
| |
| #: src/meta/doc.md:61 |
| msgid "" |
| "```shell\n" |
| "$ rustc doc.rs --crate-type lib\n" |
| "$ rustdoc --test --extern doc=\"libdoc.rlib\" doc.rs\n" |
| "```" |
| msgstr "" |
| "```shell\n" |
| "$ rustc doc.rs --crate-type lib\n" |
| "$ rustdoc --test --extern doc=\"libdoc.rlib\" doc.rs\n" |
| "```" |
| |
| #: src/meta/doc.md:66 |
| msgid "Doc attributes" |
| msgstr "문서 속성" |
| |
| #: src/meta/doc.md:68 |
| msgid "" |
| "Below are a few examples of the most common `#[doc]` attributes used with " |
| "`rustdoc`." |
| msgstr "" |
| "다음은 `rustdoc`과 함께 사용되는 가장 일반적인 `#[doc]` 속성의 몇 가지 예입니" |
| "다." |
| |
| #: src/meta/doc.md:71 |
| msgid "`inline`" |
| msgstr "`inline`" |
| |
| #: src/meta/doc.md:73 |
| msgid "Used to inline docs, instead of linking out to separate page." |
| msgstr "" |
| "별도의 페이지로 링크하는 대신 문서를 인라인으로 표시하는 데 사용됩니다." |
| |
| #: src/meta/doc.md:78 |
| msgid "/// bar docs\n" |
| msgstr "/// bar 문서\n" |
| |
| #: src/meta/doc.md:81 |
| msgid "/// the docs for Bar\n" |
| msgstr "/// Bar에 대한 문서\n" |
| |
| #: src/meta/doc.md:86 |
| msgid "`no_inline`" |
| msgstr "`no_inline`" |
| |
| #: src/meta/doc.md:88 |
| msgid "Used to prevent linking out to separate page or anywhere." |
| msgstr "별도의 페이지나 다른 곳으로 링크되는 것을 방지하는 데 사용됩니다." |
| |
| #: src/meta/doc.md:91 |
| msgid "// Example from libcore/prelude\n" |
| msgstr "// libcore/prelude에서 가져온 예시\n" |
| |
| #: src/meta/doc.md:96 |
| msgid "`hidden`" |
| msgstr "`hidden`" |
| |
| #: src/meta/doc.md:98 |
| msgid "Using this tells `rustdoc` not to include this in documentation:" |
| msgstr "이를 사용하면 `rustdoc`이 해당 항목을 문서에 포함하지 않도록 합니다." |
| |
| #: src/meta/doc.md:101 |
| msgid "// Example from the futures-rs library\n" |
| msgstr "// futures-rs 라이브러리에서 가져온 예시\n" |
| |
| #: src/meta/doc.md:106 |
| msgid "" |
| "For documentation, `rustdoc` is widely used by the community. It's what is " |
| "used to generate the [std library docs](https://doc.rust-lang.org/std/)." |
| msgstr "" |
| "문서화를 위해 커뮤니티에서는 `rustdoc`이 널리 사용됩니다. [표준 라이브러리 문" |
| "서](https://doc.rust-lang.org/std/)를 생성하는 데 사용되는 도구이기도 합니다." |
| |
| #: src/meta/doc.md:111 |
| msgid "" |
| "[The Rust Book: Making Useful Documentation Comments](https://doc.rust-" |
| "lang.org/book/ch14-02-publishing-to-crates-io.html#making-useful-" |
| "documentation-comments)" |
| msgstr "" |
| "[The Rust Book: 유용한 문서 주석 만들기](https://doc.rust-lang.org/book/" |
| "ch14-02-publishing-to-crates-io.html#making-useful-documentation-comments)" |
| |
| #: src/meta/doc.md:112 |
| msgid "[The rustdoc Book](https://doc.rust-lang.org/rustdoc/index.html)" |
| msgstr "[rustdoc 책](https://doc.rust-lang.org/rustdoc/index.html)" |
| |
| #: src/meta/doc.md:113 |
| msgid "" |
| "[The Reference: Doc comments](https://doc.rust-lang.org/stable/reference/" |
| "comments.html#doc-comments)" |
| msgstr "" |
| "[The Reference: 문서 주석](https://doc.rust-lang.org/stable/reference/" |
| "comments.html#doc-comments)" |
| |
| #: src/meta/doc.md:114 |
| msgid "" |
| "[RFC 1574: API Documentation Conventions](https://rust-lang.github.io/rfcs/" |
| "1574-more-api-documentation-conventions.html#appendix-a-full-conventions-" |
| "text)" |
| msgstr "" |
| "[RFC 1574: API 문서 관례](https://rust-lang.github.io/rfcs/1574-more-api-" |
| "documentation-conventions.html#appendix-a-full-conventions-text)" |
| |
| #: src/meta/doc.md:115 |
| msgid "" |
| "[RFC 1946: Relative links to other items from doc comments (intra-rustdoc " |
| "links)](https://rust-lang.github.io/rfcs/1946-intra-rustdoc-links.html)" |
| msgstr "" |
| "[RFC 1946: 문서 주석에서 다른 아이템으로의 상대 링크 (intra-rustdoc links)]" |
| "(https://rust-lang.github.io/rfcs/1946-intra-rustdoc-links.html)" |
| |
| #: src/meta/doc.md:116 |
| msgid "" |
| "[Is there any documentation style guide for comments? (reddit)](https://" |
| "www.reddit.com/r/rust/comments/ahb50s/" |
| "is_there_any_documentation_style_guide_for/)" |
| msgstr "" |
| "[주석에 대한 문서화 스타일 가이드가 있나요? (reddit)](https://www.reddit.com/" |
| "r/rust/comments/ahb50s/is_there_any_documentation_style_guide_for/)" |
| |
| #: src/meta/playground.md:3 |
| msgid "" |
| "The [Rust Playground](https://play.rust-lang.org/) is a way to experiment " |
| "with Rust code through a web interface." |
| msgstr "" |
| "[Rust 플레이그라운드](https://play.rust-lang.org/)는 웹 인터페이스를 통해 " |
| "Rust 코드를 실험해 볼 수 있는 방법입니다." |
| |
| #: src/meta/playground.md:6 |
| msgid "Using it with `mdbook`" |
| msgstr "`mdbook`에서 사용하기" |
| |
| #: src/meta/playground.md:8 |
| msgid "" |
| "In [`mdbook`](https://github.com/rust-lang/mdBook), you can make code " |
| "examples playable and editable." |
| msgstr "" |
| "[`mdbook`](https://github.com/rust-lang/mdBook)에서는 코드 예제를 실행 가능하" |
| "고 수정 가능하게 만들 수 있습니다." |
| |
| #: src/meta/playground.md:16 |
| msgid "" |
| "This allows the reader to both run your code sample, but also modify and " |
| "tweak it. The key here is the adding of the word `editable` to your " |
| "codefence block separated by a comma." |
| msgstr "" |
| "이를 통해 독자는 코드 샘플을 실행할 뿐만 아니라 수정하고 조정해 볼 수도 있습" |
| "니다. 여기서 핵심은 코드 펜스(codefence) 블록에 콤마로 구분하여 `editable`이" |
| "라는 단어를 추가하는 것입니다." |
| |
| #: src/meta/playground.md:26 |
| msgid "" |
| "Additionally, you can add `ignore` if you want `mdbook` to skip your code " |
| "when it builds and tests." |
| msgstr "빌드 및 테스트 시에." |
| |
| #: src/meta/playground.md:35 |
| msgid "Using it with docs" |
| msgstr "문서에서 사용하기" |
| |
| #: src/meta/playground.md:37 |
| msgid "" |
| "You may have noticed in some of the [official Rust docs](https://doc.rust-" |
| "lang.org/core/) a button that says \"Run\", which opens the code sample up " |
| "in a new tab in Rust Playground. This feature is enabled if you use the " |
| "`#[doc]` attribute called [`html_playground_url`](https://doc.rust-lang.org/" |
| "rustdoc/write-documentation/the-doc-attribute.html#html_playground_url)." |
| msgstr "" |
| "[공식 Rust 문서](https://doc.rust-lang.org/core/) 중 일부에서 \"Run\"이라고 " |
| "적힌 버튼을 본 적이 있을 것입니다. 이 버튼을 누르면 Rust 플레이그라운드의 새 " |
| "탭에서 코드 샘플이 열립니다. 이 기능은 [`html_playground_url`](https://" |
| "doc.rust-lang.org/rustdoc/write-documentation/the-doc-" |
| "attribute.html#html_playground_url)이라는 `#[doc]` 속성을 사용하면 활성화됩니" |
| "다." |
| |
| #: src/meta/playground.md:42 |
| msgid "" |
| "````text\n" |
| "#![doc(html_playground_url = \"https://play.rust-lang.org/\")]\n" |
| "//! ```\n" |
| "//! println!(\"Hello World\");\n" |
| "//! ```\n" |
| "````" |
| msgstr "" |
| "````text\n" |
| "#![doc(html_playground_url = \"https://play.rust-lang.org/\")]\n" |
| "//! ```\n" |
| "//! println!(\"Hello World\");\n" |
| "//! ```\n" |
| "````" |
| |
| #: src/meta/playground.md:51 |
| msgid "[The Rust Playground](https://play.rust-lang.org/)" |
| msgstr "[Rust 플레이그라운드](https://play.rust-lang.org/)" |
| |
| #: src/meta/playground.md:52 |
| msgid "" |
| "[The Rust Playground On Github](https://github.com/integer32llc/rust-" |
| "playground/)" |
| msgstr "" |
| "[GitHub의 Rust 플레이그라운드](https://github.com/integer32llc/rust-" |
| "playground/)" |
| |
| #: src/meta/playground.md:53 |
| msgid "" |
| "[The rustdoc Book](https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html)" |
| msgstr "" |
| "[rustdoc 책](https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html)" |
| |
| #~ msgid "" |
| #~ "While the former enables conditional compilation, the latter " |
| #~ "conditionally evaluates to `true` or `false` literals, allowing for " |
| #~ "checks at run-time. Both utilize identical argument syntax." |
| #~ msgstr "" |
| #~ "전자는 조건부 컴파일을 가능하게 하는 반면, 후자는 조건부로 `true` 또는 " |
| #~ "`false` 리터럴로 평가되어 런타임에 검사를 가능하게 합니다. 둘 다 동일한 인" |
| #~ "자 문법을 사용합니다." |
| |
| #~ msgid "// Compile-time Error! Type mismatch so these cannot be compared:\n" |
| #~ msgstr "// 컴파일 타임 에러! 타입 불일치로 인해 비교할 수 없습니다:\n" |
| |
| #~ msgid "" |
| #~ "// This function takes ownership of the heap allocated memory from `b`\n" |
| #~ " //destroy_box(b);\n" |
| #~ msgstr "// 이 함수는 `b`로부터 힙 할당 메모리의 소유권을 가져갑니다\n" |