Skip to content

Translate faq 8~11 (ko) #3040

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Apr 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions ko/documentation/faq/1/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ header: |
<span class="separator"> | </span>
<a href="../7/" title="파트 7">7</a>
<span class="separator"> | </span>
<a href="/en/documentation/faq/8/" title="파트 8">8</a>
<a href="../8/" title="파트 8">8</a>
<span class="separator"> | </span>
<a href="/en/documentation/faq/9/" title="파트 9">9</a>
<a href="../9/" title="파트 9">9</a>
<span class="separator"> | </span>
<a href="/en/documentation/faq/10/" title="파트 10">10</a>
<a href="../10/" title="파트 10">10</a>
<span class="separator"> | </span>
<a href="/en/documentation/faq/11/" title="파트 11">11</a>
<a href="../11/" title="파트 11">11</a>
</div>
<h1>공식 Ruby FAQ</h1>

Expand Down Expand Up @@ -310,7 +310,7 @@ Ruby의 구문은 Ruby 1.0 이후 상당히 안정적이지만 때때로 새로

문제가 있는 소스 코드와 함께 `ruby -v`의 출력을 첨부하세요.

[`irb`](/en/documentation/faq/10/#irb)를 사용하는 데 문제가 있는 경우 몇 가지
[`irb`](../10/#irb)를 사용하는 데 문제가 있는 경우 몇 가지
제한 사항이 있다는 점에 유의하세요. `irb --single-irb`를 사용하거나 `ruby`
명령을 직접 사용하여 스크립트를 사용해 보세요.

Expand Down
140 changes: 140 additions & 0 deletions ko/documentation/faq/10/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
---
layout: page
title: "공식 Ruby FAQ"
lang: ko

header: |
<div class="multi-page">
<a href="../" title="Content">콘텐츠</a>
<span class="separator"> | </span>
<a href="../1/" title="파트 1">1</a>
<span class="separator"> | </span>
<a href="../2/" title="파트 2">2</a>
<span class="separator"> | </span>
<a href="../3/" title="파트 3">3</a>
<span class="separator"> | </span>
<a href="../4/" title="파트 4">4</a>
<span class="separator"> | </span>
<a href="../5/" title="파트 5">5</a>
<span class="separator"> | </span>
<a href="../6/" title="파트 6">6</a>
<span class="separator"> | </span>
<a href="../7/" title="파트 7">7</a>
<span class="separator"> | </span>
<a href="../8/" title="파트 8">8</a>
<span class="separator"> | </span>
<a href="../9/" title="파트 9">9</a>
<span class="separator"> | </span>
<strong>10</strong>
<span class="separator"> | </span>
<a href="../11/" title="파트 11">11</a>
</div>
<h1>공식 Ruby FAQ</h1>

---

{% include faq-notice.md %}

## 확장 라이브러리

### Ruby를 대화형으로 사용하려면 어떻게 해야 하나요?
{: #irb}

{% include faq-out-of-date.html %}

`irb`를 사용해 보세요. 다음은 고토 켄타로(Gotoken)의 글을 의역한 것으로,
원래는 [\[ruby-talk:444\]][ruby-talk:444]에 실린 내용입니다.

1. Ruby 아카이브의 [contrib 디렉터리](ftp://ftp.netlab.co.jp/pub/lang/ruby/contrib/)에서
`irb`의 최신 타볼을 가져옵니다.
2. `irb` 디렉터리 트리를 압축해제합니다.
3. `irb/` 디렉터리 위치를 `$RUBYLIB` 환경 변수에 추가합니다.
4. 경로 어딘가에 `$RUBYLIB/irb/irb.rb`를 가리키는 `irb`라는 심볼릭 링크를
만듭니다.
5. `chmod +x $RUBYLIB/irb/irb.rb`
6. 'rehash'를 사용하여 로그인 셸에 새 명령에 대해 알려줄 수 있습니다.
7. `irb`를 입력합니다.

readline 확장 모듈이 인터프리터와 함께 작동하면 `irb`를 훨씬 더 재미있게 사용할
수 있습니다.

Ruby 배포판의 `samples/` 디렉터리에 `eval`이라는 간단한 프로그램도 있습니다.
이 프로그램을 사용하면 표현식을 입력하고 그 값을 볼 수 있습니다. `eval`을
Ruby 트리의 `site_ruby` 디렉터리에 복사하고 다음을 통해 호출할 수
있습니다.

~~~
ruby -r eval -e0
~~~

[ruby-talk:444]: https://blade.ruby-lang.org/ruby-talk/444

### Ruby용 디버거가 있나요?

Ruby용 gdb와 유사한 디버거가 있습니다.

~~~
ruby -r debug your_program
~~~

### Ruby에서 C로 작성된 라이브러리를 사용하려면 어떻게 해야 하나요?

모든 스크립팅 언어 중에서 Ruby는 아마도 가장 확장하기 쉬운 언어일 것입니다.
참조 카운팅과 변수 유형에 대한 문제가 없고 배울 인터페이스도 거의 없습니다.
실제로 Ruby를 확장하는 데 사용되는 C 코드는 놀랍게도 Ruby 코드 자체와 비슷하게
보이는 경우가 많습니다.

먼저 Ruby 소스에서 `doc/extension.rdoc` 파일을 읽거나
[docs.ruby-lang.org][extension-rdoc]의 extension.rdoc을 읽어보세요. 확장
라이브러리를 작성하는 경우뿐만 아니라 Ruby를 더 깊이 이해하고자 하는 경우에도
좋은 문서입니다.

그런 다음 RubyGems 사이트에서 [확장을 사용한 젬 생성 가이드][rubygems-guide]를
제공합니다.
여기에는 설치 시 빌드되는 C 확장을 사용하여 젬을 설정하는 방법이 나와 있습니다.
또한 C 라이브러리를 래핑하는 일부 기존 젬에 대한 링크와 추가 읽을거리에 대한
링크도 있습니다.

인터프리터 자체의 소스와 `ext/` 디렉터리에서 제공되는 다양한 확장기능을
살펴볼 수도 있습니다(GitHub에서 [Ruby 저장소][ruby-github]를 찾아볼 수 있습니다).

[extension-rdoc]: https://docs.ruby-lang.org/en/master/extension_rdoc.html
[rubygems-guide]: http://guides.rubygems.org/gems-with-extensions/
[ruby-github]: https://github.com/ruby/ruby

### Ruby에서 Tcl/Tk를 사용할 수 있나요?

{% include faq-out-of-date.html %}

표준 배포판에는 Tcl/Tk에 대한 두 개의 인터페이스가 포함되어 있습니다. 하나는
`ext/tcltk/` 아래에 있으며 `require "tcltk"`로 로드됩니다. 이 구문은 Tcl
인터프리터에 전달되는 Tcl과 매우 유사합니다. 안타깝게도 이 라이브러리에 대한
설명은 일본어로 작성되어 있습니다.

다른 하나는 `ext/tk/` 아래에 있으며 `require "tk"`로 로드됩니다. 이 구문은
Perl 및 Python 인터페이스에서 제공하는 Tk 인터페이스 스타일에 더 가깝습니다.

### Tk가 작동하지 않습니다. 왜 그럴까요?

{% include faq-out-of-date.html %}

Tk 버전이 오래되었을 수 있으니 최신 버전을 사용해 보세요.

### Ruby에서 gtk+나 xforms 인터페이스를 사용할 수 있나요?

{% include faq-out-of-date.html %}

Ruby ftp 사이트의 `contrib/`에서 `ruby-gtk-x.xx.tar.gz`,
`ruby-forms-x.x.tar.gz`를 찾을 수 있습니다.

### 날짜 계산은 어떻게 하나요?

{% include faq-out-of-date.html %}

`Time` 개체는 1970년 1월 1일부터 2038년 1월 19일 사이의 날짜만 표현
할 수 있습니다.

두 가지 표준 확장 라이브러리 모듈이 제공됩니다. 단순하고 영어 달력을 사용하는
`require "date"`와 보다 일반적인 용도의 `require "date2"`가 있습니다.

`sample/cal.rb`도 참조하세요.
187 changes: 187 additions & 0 deletions ko/documentation/faq/11/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
---
layout: page
title: "공식 Ruby FAQ"
lang: ko

header: |
<div class="multi-page">
<a href="../" title="Content">콘텐츠</a>
<span class="separator"> | </span>
<a href="../1/" title="파트 1">1</a>
<span class="separator"> | </span>
<a href="../2/" title="파트 2">2</a>
<span class="separator"> | </span>
<a href="../3/" title="파트 3">3</a>
<span class="separator"> | </span>
<a href="../4/" title="파트 4">4</a>
<span class="separator"> | </span>
<a href="../5/" title="파트 5">5</a>
<span class="separator"> | </span>
<a href="../6/" title="파트 6">6</a>
<span class="separator"> | </span>
<a href="../7/" title="파트 7">7</a>
<span class="separator"> | </span>
<a href="../8/" title="파트 8">8</a>
<span class="separator"> | </span>
<a href="../9/" title="파트 9">9</a>
<span class="separator"> | </span>
<a href="../10/" title="파트 10">10</a>
<span class="separator"> | </span>
<strong>11</strong>
</div>
<h1>공식 Ruby FAQ</h1>

---

{% include faq-notice.md %}

## 기타 기능

### `a ? b : c`는 무엇을 의미하나요?

이것은 "삼항 연산자"라고 하며, 'if a then b else c end'와
동일합니다.

### 파일의 줄 수를 계산하려면 어떻게 해야 하나요?

다음 코드가 가장 빠른 결과를 제공할 수 있습니다.

~~~
File.readlines("example").size # => 3
~~~

### `MatchData#begin`과 `MatchData#end`는 무엇을 반환하나요?

이 함수는 `$~`와 함께 작동하며 원본 문자열에서 일치하는 데이터의 시작 인덱스와
끝 인덱스를 반환합니다. [탭 확장](../9/#tab-expansion)에서 예제를 참조하세요.

### 배열의 요소를 합산하려면 어떻게 해야 하나요?

{% include faq-out-of-date.html %}

특정 문제를 해결하기보다는 일반적인 경우를 해결해 봅시다. 가장 먼저 할 일은
`Enumerable` 객체를 반복하고 단일 결과를 수집하는 메서드를 생성하는 것입니다.
Smalltalk는 이 메소드를 inject라고 부르기 때문에 우리도 그렇게 부르겠습니다.

~~~
module Enumerable

# inject(n) {|n, i| ...}
def inject(n)
each {|i| n = yield(n, i) }

n
end
end
~~~

`Enumerable`에 메서드를 추가한 것을 주목하세요. 즉, Enumerable을 포함하는 모든
곳에서 이제 `inject`를 사용할 수 있습니다. 하지만 어떻게 사용할까요? 하나의
인자 `n`과 블록이 필요합니다. 열거되는 대상의 각 요소에 대해 `n`과 요소 자체를
전달하면서 블록을 호출합니다. 블록의 결과는 다시 `n`에 할당됩니다. 따라서
`sum`을 정의하기 위해 다음과 같이 작성할 수 있습니다:

~~~
module Enumerable
def sum
inject(0) {|n, i| n + i }
end
end

[1,3,5,7,9].sum # => 25
(1..100).sum # => 5050
~~~

### 연속은 어떻게 사용하나요?

{% include faq-out-of-date.html %}

Ruby의 연속을 사용하면 Ruby 프로그램에서 특정 장소를 나타내는 객체를 생성한
다음 언제든지 해당 장소로 돌아갈 수 있습니다(범위를 벗어난 것처럼 보이
는 경우에도). 연속은 복잡한 제어 구조를 구현하는 데 사용할 수 있지만
일반적으로는 사람들에게 혼란을 더하기만 합니다.

[\[ruby-talk:4482\]][ruby-talk:4482]에서 Jim Weirich가 다음과 같은 연속 예제를
게시했습니다.

~~~
# --------------------------------------------------------------------
# 단순 생산자/소비자
# --------------------------------------------------------------------
# 연속을 사용하여 단순 계산 작업과 인쇄 작업을 함께 연결합니다.
#
# 사용법: count(limit)

def count_task(count, consumer)
(1..count).each do |i|
callcc {|cc| consumer.call cc, i }
end
nil
end

def print_task()
producer, i = callcc { |cc| return cc }
print "#{i} "
callcc { |cc| producer.call }
end

def count(limit)
count_task(limit, print_task())
print "\n"
end
~~~


~~~
# --------------------------------------------------------------------
# 주어진 숫자의 배수 필터링하기
# --------------------------------------------------------------------
# 소비자이면서 동시에 생산자인 필터를 만듭니다. 카운팅 작업과 인쇄 작업 사이에
# 삽입합니다.
#
# 사용법: omit(2, limit)

def filter_task(factor, consumer)
producer, i = callcc { |cc| return cc }
if (i%factor) != 0 then
callcc { |cc| consumer.call cc, i }
end
producer.call
end

def omit(factor, limit)
printer = print_task()
filter = filter_task(factor, printer)
count_task(limit, filter)
print "\n"
end
~~~


~~~
# --------------------------------------------------------------------
# 소수 생성기
# --------------------------------------------------------------------
# 소수 생성기를 생성합니다. 새로운 소수가 발견되면
# 생산자와 소비자의 체인에 새로운 다중 필터를 동적으로 추가합니다.
#
# 사용법: primes(limit)

def prime_task(consumer)
producer, i = callcc { |cc| return cc }
if i >= 2 then
callcc { |cc| consumer.call cc, i }
consumer = filter_task(i, consumer)
end
producer.call
end

def primes(limit)
printer = print_task()
primes = prime_task(printer)
count_task(limit, primes)
print "\n"
end
~~~

[ruby-talk:4482]: https://blade.ruby-lang.org/ruby-talk/4482
8 changes: 4 additions & 4 deletions ko/documentation/faq/2/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ header: |
<span class="separator"> | </span>
<a href="../7/" title="파트 7">7</a>
<span class="separator"> | </span>
<a href="/en/documentation/faq/8/" title="파트 8">8</a>
<a href="../8/" title="파트 8">8</a>
<span class="separator"> | </span>
<a href="/en/documentation/faq/9/" title="파트 9">9</a>
<a href="../9/" title="파트 9">9</a>
<span class="separator"> | </span>
<a href="/en/documentation/faq/10/" title="파트 10">10</a>
<a href="../10/" title="파트 10">10</a>
<span class="separator"> | </span>
<a href="/en/documentation/faq/11/" title="파트 11">11</a>
<a href="../11/" title="파트 11">11</a>
</div>
<h1>공식 Ruby FAQ</h1>

Expand Down
8 changes: 4 additions & 4 deletions ko/documentation/faq/3/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ header: |
<span class="separator"> | </span>
<a href="../7/" title="파트 7">7</a>
<span class="separator"> | </span>
<a href="/en/documentation/faq/8/" title="파트 8">8</a>
<a href="../8/" title="파트 8">8</a>
<span class="separator"> | </span>
<a href="/en/documentation/faq/9/" title="파트 9">9</a>
<a href="../9/" title="파트 9">9</a>
<span class="separator"> | </span>
<a href="/en/documentation/faq/10/" title="파트 10">10</a>
<a href="../10/" title="파트 10">10</a>
<span class="separator"> | </span>
<a href="/en/documentation/faq/11/" title="파트 11">11</a>
<a href="../11/" title="파트 11">11</a>
</div>
<h1>공식 Ruby FAQ</h1>

Expand Down
Loading