diff --git a/ko/documentation/faq/2/index.md b/ko/documentation/faq/2/index.md index 33ec863700..9a43404724 100644 --- a/ko/documentation/faq/2/index.md +++ b/ko/documentation/faq/2/index.md @@ -68,7 +68,7 @@ Ruby의 객체 지향 순수성은 Python에는 부족하거나 Python이 여전 할 수 있고, 그러면 해당 모듈의 메서드, 상수 등이 클래스에 삽입됩니다. Ruby는 또 Smalltalk와 마찬가지로 클로저와 코드 블록을 제공하고 동일한 효과를 -위해 사용합니다. Ruby 컬렉션 클래스와 반복자는 Python이 싹트고 있는 +위해 사용합니다. Ruby 컬렉션 클래스와 이터레이터는 Python이 싹트고 있는 임시방편(람다, 리스트 컴프리헨션)보다 뛰어나고 훨씬 강력하고 우아합니다. Ruby의 구문과 디자인 철학은 Perl의 영향을 많이 받았습니다. 문법적 변동성이 diff --git a/ko/documentation/faq/5/index.md b/ko/documentation/faq/5/index.md index 2608df556b..5a32aaf730 100644 --- a/ko/documentation/faq/5/index.md +++ b/ko/documentation/faq/5/index.md @@ -62,7 +62,7 @@ end ~~~ 배열 `data`의 each 메서드에는 `do ... end` 블록이 전달되어 반복적으로 -실행됩니다. 호출할 때마다 블록은 배열의 연속적인 요소를 전달받습니다. +실행됩니다. 호출할 때마다 블록은 배열의 요소를 차례로 전달받습니다. 블록을 정의할 때 `do ... end` 대신 `{ ... }`를 쓸 수 있습니다. @@ -81,7 +81,7 @@ data.each { |i| 3 ~~~ -이 코드는 전 예제와 동일한 의미를 갖습니다. 그러나 경우에 따라 우선순위 +이 코드는 앞의 예제와 동일한 의미를 갖습니다. 그러나 경우에 따라 우선순위 문제로 인해 `do ... end`와 `{ ... }`가 다르게 동작할 수 있습니다. ~~~ @@ -89,22 +89,22 @@ foobar a, b do ... end # foobar가 이터레이터. foobar a, b { ... } # b가 이터레이터. ~~~ -이는 `{ ... }`는 `do ... end` 블록보다 앞의 표현식에 더 강하게 바인딩되기 +이는 `{ ... }`가 `do ... end` 블록보다 앞의 표현식에 더 강하게 바인딩되기 때문입니다. 첫 번째 예는 `foobar(a, b) do ... end`와 같고, 두 번째 예는 `foobar(a, b { ... })`와 같습니다. ### 블록을 이터레이터에 전달하려면 어떻게 해야 하나요? -반복자 호출 뒤에 블록을 배치하기만 하면 됩니다. `Proc`을 참조하는 변수나 상수 +이터레이터 호출 뒤에 블록을 배치하기만 하면 됩니다. `Proc`을 참조하는 변수나 상수 이름 앞에 `&`를 붙여 `Proc` 객체를 전달할 수도 있습니다. ### 블록은 이터레이터에서 어떻게 사용되나요? {% include faq-out-of-date.html %} -이터레이터 메서드에서 블록을 실행하는 방법에는 세 가지가 있습니다: +이터레이터 메서드에서 블록을 실행하는 방법에는 세 가지가 있습니다. (1) `yield` 제어 구조, (2) `call`을 사용하여 (블록으로 만든) `Proc` 인자를 -호출하는 것, (3) `Proc.new`를 사용한 후 호출하는 것 등이 있습니다. +호출하는 것, (3) `Proc.new`를 사용한 후 호출하는 것입니다. `yield` 문은 블록을 호출하며, 하나 이상의 인수를 전달할 수 있습니다. @@ -146,7 +146,7 @@ my_iterator {|a, b| puts a, b } 메서드에 주어진 블록을 인수로 받아 프로시저 객체를 생성합니다. (`proc`과 `lambda`는 사실상 동의어입니다.) -_[업데이트 필요: `lambda`는 약간 다른 방식으로 작동하며 블록 없이 Proc 객체를 +_[업데이트 필요: `lambda`는 약간 다른 방식으로 작동하며, 블록 없이 Proc 객체를 생성하려고 시도했습니다(`tried to create Proc object without a block`)라는 경고가 표시됩니다.]_ @@ -174,7 +174,7 @@ my_iterator {|a, b| puts a, b } 놀랍게도 `Proc.new`와 친구들은 메서드에 연결된 블록을 전혀 소비하지 않으며, `Proc.new`를 호출할 때마다 동일한 블록에서 새 프로시저 객체를 생성합니다. -블록이 메서드와 연관되어 있는지 여부는 `block_given?`을 호출하여 확인할 수 +메서드에 연관된 블록이 있는지 여부는 `block_given?`을 호출하여 확인할 수 있습니다. ### 블록이 없는 `Proc.new`는 어떤 기능을 하나요? @@ -183,11 +183,10 @@ my_iterator {|a, b| puts a, b } 그러나 메서드 정의에서 블록이 없는 `Proc.new`는 메서드가 호출될 때 블록이 존재한다는 것을 의미하므로 오류가 발생하지 않습니다. - ### 이터레이터를 병렬로 실행하려면 어떻게 해야 하나요? 여기 [\[ruby-talk:5252\]][ruby-talk:5252]에서 Matz가 스레드를 사용하는 해결책을 -채택했습니다. +가져왔습니다. ~~~ require "thread" diff --git a/ko/documentation/faq/6/index.md b/ko/documentation/faq/6/index.md index 3cd217aeb4..6eccd317e7 100644 --- a/ko/documentation/faq/6/index.md +++ b/ko/documentation/faq/6/index.md @@ -45,16 +45,16 @@ header: | `Fixnum`, `true`, `nil`, `false`는 즉시 값으로 구현되어 있습니다. 즉시 값을 사용하면 변수는 객체에 대한 참조가 아니라 객체 자체를 보유합니다. -이러한 객체에는 싱글톤 메서드를 정의할 수 없습니다. 동일한 값을 가진 두 개 -의 `Fixnum`은 항상 동일한 객체 인스턴스를 나타내므로, (예를 들어) 값이 -`1`인 `Fixnum`에 대한 인스턴스 변수는 시스템의 모든 '1'에 공유됩니다. 따라서 +이러한 객체에는 싱글턴 메서드를 정의할 수 없습니다. 동일한 값을 가진 두 개의 +`Fixnum`은 항상 동일한 객체 인스턴스를 나타내므로, (예를 들어) 값이 +`1`인 `Fixnum`에 대한 인스턴스 변수는 시스템의 모든 `1`에 공유됩니다. 따라서 이 중 하나에 대해서만 싱글톤 메서드를 정의하는 것은 불가능합니다. ### `nil`과 `false`의 차이점은 무엇인가요? -먼저 유사성부터 설명하겠습니다. `nil`과 `false`는 부울 컨텍스트에서 `false`로 +먼저 유사성부터 설명하겠습니다. `nil`과 `false`는 불 컨텍스트에서 `false`로 평가되는 유일한 두 개의 객체입니다. -(즉, 이 둘은 유일한 "falsy" 값이며 다른 모든 객체는 "truthy" 입니다.) +(즉, 이 둘은 유일한 "falsy" 값이며 다른 모든 객체는 "truthy"입니다.) 그러나 `nil`과 `false`는 서로 다른 클래스(`NilClass`와 `FalseClass`)의 인스턴스이며, 다른 곳에서는 다른 동작을 합니다. @@ -65,13 +65,13 @@ header: | ### 빈 문자열이 `false`가 아닌 이유는 무엇인가요? -Q: 조건 표현식에서 빈 문자열(`""`)이 `true`를 반환하던데요! Perl에서 -는 `false`였는데... +Q: 조건 표현식에서 빈 문자열(`""`)이 `true`를 반환하던데요! Perl에서는 +`false`였는데... -A: 하지만 Ruby는 Perl이 아닙니다 ;-). Ruby에서는 조건부 컨텍스트에서 - `nil`과 `false`만 거짓입니다. +A: 하지만 Ruby는 Perl이 아닙니다. ;-) Ruby에서는 조건부 컨텍스트에서 +`nil`과 `false`만 거짓입니다. -`empty?`를 사용하거나 문자열을 `""`와 비교하거나 문자열의 `size`, `length`를 +`empty?`를 사용하거나, 문자열을 `""`와 비교하거나, 문자열의 `size`, `length`를 `0`과 비교하여 문자열이 비어 있는지 확인할 수 있습니다. ### `:name`은 무엇을 의미하나요? @@ -107,9 +107,9 @@ SOUTH = :SOUTH ### 심볼의 값에 액세스하려면 어떻게 해야 하나요? -심볼에 해당하는 변수의 값을 얻으려면 `symbol.to_s` 또는 `"#{심볼}"`을 -사용하여 변수 이름을 얻은 다음 심볼의 범위에서 이를 평가하여 변수의 내용 -을 얻을 수 있습니다. +심볼에 해당하는 변수의 값을 얻으려면 `symbol.to_s` 또는 `"#{symbol}"`을 +사용하여 변수 이름을 얻은 다음 심볼의 스코프에서 이를 평가하여 변수의 내용을 +얻을 수 있습니다. ~~~ a = "This is the content of `a'" @@ -136,7 +136,7 @@ demo = Demo.new demo.send(:hello) ~~~ -또는 `Object#method`를 사용하여 해당 `Method` 객체를 반환한 다음 호출할 +또는 `Object#method`를 사용하여 해당 `Method` 객체를 반환하게 한 다음 호출할 수 있습니다. ~~~ @@ -147,9 +147,9 @@ m.call # => "Hello, world" ### `loop`는 제어 구조인가요? `loop`는 제어 구조체처럼 보이지만 실제로는 `Kernel`에 정의된 메서드입니다. -loop 다음 블록은 지역 변수에 대한 새로운 스코프를 만듭니다. +loop 뒤에 오는 블록은 지역 변수에 대한 새로운 스코프를 만듭니다. -### Ruby에는 후 테스트(post-test) 루프가 없습니다. +### Ruby에는 사후 테스트(post-test) 루프가 없습니다. Q: Ruby에는 `do { ... } while` 구문이 없는데 마지막에 조건을 테스트하는 루프를 어떻게 구현하나요? @@ -175,7 +175,7 @@ i = 3 i = 4 ~~~ -### `p {}`의 경우 처럼 해시 리터럴을 메서드에 전달할 수 없는 이유는 무엇인가요? +### `p {}`의 경우처럼 해시 리터럴을 메서드에 전달할 수 없는 이유는 무엇인가요? `{}`는 `Hash` 생성자가 아닌 블록으로 파싱됩니다. `p({})`처럼 매개변수라는 사실을 명시하면 `{}`가 표현식으로 처리되도록 할 수 있습니다. @@ -204,9 +204,9 @@ end 비트 패턴)이고, `"\\1"`은 백슬래시와 문자 `"1"`이 포함된 두 문자로 된 문자열입니다. -### '..`와 '...`의 차이점은 무엇인가요? +### `..`와 `...`의 차이점은 무엇인가요? -'...`는 범위에 오른쪽을 포함하지만 '...`는 포함하지 않습니다. +`..`는 범위의 오른쪽 항을 포함하지만 `...`는 포함하지 않습니다. ~~~ (5..8).to_a # => [5, 6, 7, 8] @@ -216,9 +216,9 @@ end ### `or`와 `||`의 차이점은 무엇인가요? Q: `p(nil || "Hello")`는 `"Hello"`를 출력하지만 `p(nil or "Hello")`는 - 구문 분석 오류를 발생시킵니다. 왜 그럴까요? +구문 분석 오류를 발생시킵니다. 왜 그럴까요? -A: `or`의 우선순위가 너무 낮기 때문입니다, `p((nil 또는 "Hello") )`는 +A: `or`의 우선순위가 너무 낮기 때문입니다, `p( (nil or "Hello") )`는 작동합니다. `or`의 우선 순위는 `=`보다 낮지만 `||`의 우선 순위는 더 높습니다. @@ -233,7 +233,7 @@ foo = nil or "Hello" # (foo = nil) or "Hello" 로 해석 foo # => nil ~~~ -`or`(및 유사하게 `and`)은 부울 표현식을 결합하는 데 사용하는 것이 **아니라** +`or`(및 유사하게 `and`)는 불 표현식을 결합하는 데 사용하는 것이 **아니라** 다음과 같은 제어 흐름에 사용하는 것이 가장 좋습니다. ~~~ @@ -250,10 +250,10 @@ do_something or raise "some error!" ### `load`와 `require`의 차이점은 무엇인가요? -`load`는 Ruby 프로그램(`*.rb`)을 로드하고 실행합니다. +`load`는 Ruby 프로그램(`*.rb`)을 불러오고 실행합니다. -`require`는 Ruby 프로그램도 로드하지만 바이너리 Ruby 확장 모듈(공유 라이브러리 -또는 DLL)도 로드합니다. 거기에 더해 `require`는 기능이 두 번 이상 로드되지 +`require`는 Ruby 프로그램도 불러오지만 바이너리 Ruby 확장 모듈(공유 라이브러리 +또는 DLL)도 불러옵니다. 거기에 더해 `require`는 기능을 두 번 이상 불러오지 않도록 합니다. ### Ruby에는 예외 처리가 있나요? @@ -272,14 +272,14 @@ ensure end ~~~ -`begin` 절에서 예외가 발생하면 일치하는 예외 이름을 가진 `rescue` 절이 실행 -됩니다. `ensure`절은 예외 발생 여부에 관계없이 실행됩니다. `rescue` 및 `ensure` -절은 생략할 수 있습니다. +`begin` 절에서 예외가 발생하면 일치하는 예외 이름을 가진 `rescue` 절이 +실행됩니다. `ensure` 절은 예외 발생 여부에 관계없이 실행됩니다. `rescue` 및 +`ensure` 절은 생략할 수 있습니다. `rescue` 절에 대해 예외 클래스가 지정되지 않은 경우 묵시적으로 `StandardError` -예외를 가르키며, `StandardError`와 `is_a?` 관계에 있는 예외가 캡처됩니다. +예외를 가리키며, `StandardError`와 `is_a?` 관계에 있는 예외가 캡처됩니다. 이 표현식은 `begin` 절의 값을 반환합니다. -가장 최근의 예외는 전역 변수 `$!`에 의해 액세스가 가능합니다(따라서 `$!.type`을 +가장 최근의 예외는 전역 변수 `$!`을 통해 액세스가 가능합니다(따라서 `$!.type`을 사용하여 유형을 확인할 수 있습니다).