IRB

IRB (Interactive Ruby)

대화형 루비(Interactive Ruby) 셸을 제공하는 모듈이에요.

출처: Ruby 3.3 API

본문

IRB 모듈("Interactive Ruby")은 Ruby 인터프리터와 사용자 상호작용을 지원하는 셸 같은 인터페이스를 제공해요. 읽기-평가-출력 루프(REPL)로 동작하는데:

  • 입력하는 각 문자를 읽어요. IRB 컨텍스트를 수정해서 입력이 동작하는 방식을 바꿀 수 있어요. "Input (입력)" 참고.
  • 문법적으로 완전한 구절을 읽을 때마다 코드를 평가해요.
  • 평가 후에 출력해요. IRB 컨텍스트를 수정해서 출력이 동작하는 방식을 바꿀 수 있어요. "Output (출력)" 참고.

예시:

$ irb
irb(main):001> File.basename(Dir.pwd)
=> "irb"
irb(main):002> Dir.entries('.').size
=> 25
irb(main):003* Dir.entries('.').select do |entry|
irb(main):004*   entry.start_with?('R')
irb(main):005> end
=> ["README.md", "Rakefile"]

입력한 내용에는 IRB 전용 명령도 포함될 수 있어요. 보시다시피 셸 명령 irb를 사용해 IRB를 시작할 수 있어요. exit 명령을 입력하면 IRB 세션을 멈출 수 있어요.

irb(main):006> exit
$

이 시점에 IRB는 배열 IRB.conf[:AT_EXIT]에서 발견된 모든 훅을 호출한 후 종료해요.

시작 (Startup)

시작할 때 IRB는:

  • (주어지면) 설정 파일의 내용을 Ruby 코드로 해석해요.
  • 해시 IRB.conf와 기본값으로부터 초기 세션 컨텍스트를 구성해요. 해시 내용은 커맨드라인 옵션과 설정 파일의 직접 할당으로 영향을 받을 수 있어요.
  • 컨텍스트를 변수 conf에 할당해요.
  • 커맨드라인 인자를 변수 ARGV에 할당해요.
  • 프롬프트를 출력해요.
  • 초기화 스크립트의 내용을 사용자가 입력한 명령인 것처럼 IRB 셸에 넣어요.

커맨드라인 (The Command Line)

커맨드라인에서 모든 옵션은 모든 인자보다 앞에 와요. 옵션으로 인식되지 않는 첫 항목은 인자로 취급되고, 이어지는 모든 항목도 마찬가지예요.

커맨드라인 옵션 (Command-Line Options)

많은 커맨드라인 옵션은 해시 IRB.conf의 항목에 영향을 주고, 이것은 다시 IRB 세션의 초기 설정에 영향을 줘요. 옵션의 자세한 내용은 아래 관련 하위 섹션에 설명돼 있어요. IRB 커맨드라인 옵션의 대략적 목록은 도움말 메시지에서 볼 수 있는데, 커맨드라인 옵션 --help를 써도 표시돼요.

커맨드라인 인자 (Command-Line Arguments)

커맨드라인 인자는 배열 ARGV로 IRB에 전달돼요.

$ irb --noscript Foo Bar Baz
irb(main):001> ARGV
=> ["Foo", "Bar", "Baz"]
irb(main):002> exit
$

커맨드라인 옵션 --는 그 뒤의 모든 것을 인자로 취급하게 해요. 옵션처럼 보여도요.

$ irb --noscript -- --noscript -- Foo Bar Baz
irb(main):001> ARGV
=> ["--noscript", "--", "Foo", "Bar", "Baz"]
irb(main):002> exit
$

설정 파일 (Configuration File)

설정 파일로 IRB를 초기화할 수 있어요. 커맨드라인 옵션 -f가 주어지면 설정 파일을 찾지 않아요. 그 외에는 사용 가능한 설정 파일이 있으면 IRB가 그것을 읽고 해석해요.

설정 파일에는 어떤 Ruby 코드든 넣을 수 있고, 유용하게 다음 같은 사용자 코드를 포함할 수 있어요.

  • 이후 IRB에서 디버깅할 수 있는 코드.
  • IRB 자체를 설정하는 코드.
  • 파일을 require하거나 load하는 코드.

설정 파일의 경로는 다음 중 가장 먼저 발견되는 것이에요.

  • 변수 $IRBRC의 값 (정의되어 있으면).
  • 변수 $XDG_CONFIG_HOME/irb/irbrc의 값 (정의되어 있으면).
  • 파일 $HOME/.irbrc (존재하면).
  • 파일 $HOME/.config/irb/irbrc (존재하면).
  • 현재 디렉터리의 파일 .irbrc (존재하면).
  • 현재 디렉터리의 파일 irb.rc (존재하면).
  • 현재 디렉터리의 파일 _irbrc (존재하면).
  • 현재 디렉터리의 파일 $irbrc (존재하면).

검색이 실패하면 설정 파일이 없어요. 검색이 성공하면 설정 파일은 Ruby 코드로 읽히므로 원하는 어떤 Ruby 프로그래밍이든 담을 수 있어요. 메서드 conf.rc?는 설정 파일이 읽혔으면 true, 아니면 false를 돌려줘요. 해시 항목 IRB.conf[:RC]에도 그 값이 들어 있어요.

해시 IRB.conf (Hash IRB.conf)

해시 IRB.conf의 초기 항목은 다음에 의해 결정돼요.

  • 기본값.
  • 기본값을 덮어쓸 수 있는 커맨드라인 옵션.
  • 설정 파일의 직접 할당.

IRB.conf라고 입력하면 해시를 볼 수 있어요. 항목 의미의 자세한 내용은 아래 관련 하위 섹션에 설명돼 있어요.

초기화 우선순위에 관한 참고 (Notes on Initialization Precedence)

  • 해시 IRB.conf의 항목과 커맨드라인 옵션 사이의 충돌은 해시 항목 쪽으로 해결돼요.
  • 해시 IRB.conf는 설정 파일이 해석될 때 단 한 번만 컨텍스트에 영향을 줘요. 이후의 변경은 컨텍스트에 영향을 주지 않으므로 사실상 의미가 없어요.

초기화 스크립트 (Initialization Script)

기본적으로 첫 커맨드라인 인자(옵션 뒤)는 Ruby 초기화 스크립트의 경로예요. IRB는 초기화 스크립트를 읽고 그 내용을 사용자가 입력한 명령인 것처럼 IRB 셸에 넣어요. 커맨드라인 옵션 --noscript는 첫 커맨드라인 인자를 (초기화 스크립트 대신) 보통 인자로 취급하게 해요. --script가 기본이에요.

입력 (Input)

이 섹션은 IRB 입력이 동작하는 방식을 바꿀 수 있게 해 주는 기능을 설명해요.

입력 명령 기록 (Input Command History)

기본적으로 IRB는 .irb_history라는 파일에 최대 1000개의 입력 명령 기록을 저장해요. 기록 파일은 설정 파일이 발견되면 그 디렉터리에, 아니면 ~/에 있어요. 새 IRB 세션은 기록 파일이 없으면 만들고, 있으면 파일에 추가해요.

설정 파일에서 IRB.conf[:HISTORY_FILE] = filepath를 추가해 파일 경로를 바꿀 수 있어요 (filepath는 문자열 경로). 세션 중에는 conf.history_file 메서드가 파일 경로를 돌려주고, conf.history_file = new_filepath가 기록을 new_filepath의 파일로 복사해 그 파일이 세션의 기록 파일이 돼요.

설정 파일에서 IRB.conf[:SAVE_HISTORY] = n을 추가해 저장할 명령 수를 바꿀 수 있어요. n은:

  • 양의 정수: 저장할 명령 수.
  • 0: 모든 명령을 저장.
  • nil: 명령을 저장하지 않음.

세션 중에는 conf.save_historyconf.save_history=로 그 수를 가져오거나 바꿀 수 있어요.

명령 별칭 (Command Aliases)

기본적으로 IRB는 여러 명령 별칭을 정의해요.

irb(main):001> conf.command_aliases
=> {:"$"=>:show_source, :"@"=>:whereami}

설정 파일에서 IRB.conf[:COMMAND_ALIASES] = {foo: :show_source, bar: :whereami}로 초기 별칭을 바꿀 수 있어요. 현재 별칭은 설정 메서드 conf.command_aliases=로 언제든 교체할 수 있어요. conf.command_aliases는 해시이므로 수정할 수도 있어요.

파일 끝 (End-of-File)

기본적으로 IRB.conf[:IGNORE_EOF]는 false예요. 즉 파일 끝 문자 Ctrl-D를 입력하면 세션이 종료돼요. 설정 파일에 IRB.conf[:IGNORE_EOF] = true를 추가해 그 동작을 반대로 할 수 있어요. 세션 중에는 conf.ignore_eof?가 설정을 돌려주고 conf.ignore_eof = boolean이 설정해요.

SIGINT

기본적으로 IRB.conf[:IGNORE_SIGINT]는 true예요. 즉 인터럽트 문자 Ctrl-C를 입력하면 세션이 종료돼요. 설정 파일에 IRB.conf[:IGNORE_SIGING] = false를 추가해 반대로 할 수 있어요. 세션 중에는 conf.ignore_siging?가 설정을 돌려주고 conf.ignore_sigint = boolean이 설정해요.

자동 완성 (Automatic Completion)

기본적으로 IRB는 자동 완성(automatic completion)을 활성화해요. 다음 중 하나로 비활성화할 수 있어요.

  • 설정 파일에 IRB.conf[:USE_AUTOCOMPLETE] = false 추가.
  • 커맨드라인 옵션 --noautocomplete 사용 (--autocomplete가 기본).

conf.use_autocomplete? 메서드는 자동 완성이 활성화되어 있으면 true, 아니면 false를 돌려줘요. 세션 중에는 이 설정을 바꿀 수 없어요.

자동 들여쓰기 (Automatic Indentation)

기본적으로 IRB는 구조를 보여주도록 코드 줄을 자동으로 들여써요 (예: 블록의 내용을 들여씀). 현재 설정은 설정 메서드 conf.auto_indent_mode가 돌려줘요. 초기 기본값은 true예요.

irb(main):001> conf.auto_indent_mode
=> true
irb(main):002* Dir.entries('.').select do |entry|
irb(main):003*   entry.start_with?('R')
irb(main):004> end
=> ["README.md", "Rakefile"]

설정 파일에서 IRB.conf[:AUTO_INDENT] = false로 초기 설정을 바꿀 수 있어요. IRB 세션에서는 현재 설정을 바꿀 수 없다는 점을 기억하세요.

입력 메서드 (Input Method)

IRB 입력 메서드는 명령 입력을 어떻게 읽을지를 결정해요. 기본적으로 세션의 입력 메서드는 IRB::RelineInputMethod예요. 단, TERM 환경 변수의 값이 'dumb'이면 가장 단순한 입력 메서드가 사용돼요.

다음으로 입력 메서드를 설정할 수 있어요.

  • 설정 파일에 IRB.conf[:USE_SINGLELINE] = true 또는 IRB.conf[:USE_MULTILINE]= false를 추가하면 입력 메서드를 IRB::ReadlineInputMethod로 설정. IRB.conf[:USE_SINGLELINE] = false 또는 IRB.conf[:USE_MULTILINE] = trueIRB::RelineInputMethod로 설정.
  • 커맨드라인 옵션: --singleline 또는 --nomultiline은 입력 메서드를 IRB::ReadlineInputMethod로 설정. --nosingleline 또는 --multilineIRB::RelineInputMethod로 설정. --nosingleline과 함께 --nomultiline은 입력을 IRB::StdioInputMethod로 설정.

conf.use_multiline?와 그 동의어 conf.use_reline은:

  • 옵션 --multiline이 주어졌으면 true.
  • 옵션 --nomultiline이 주어졌으면 false.
  • 둘 다 주어지지 않았으면 nil.

conf.use_singleline?와 그 동의어 conf.use_readline은:

  • 옵션 --singleline이 주어졌으면 true.
  • 옵션 --nosingleline이 주어졌으면 false.
  • 둘 다 주어지지 않았으면 nil.

출력 (Output)

이 섹션은 IRB 출력이 동작하는 방식을 바꿀 수 있게 해 주는 기능을 설명해요.

반환값 출력 (에코) (Return-Value Printing (Echoing))

기본적으로 IRB는 모든 입력 명령이 돌려준 값들을 출력(에코)해요. 다음 중 하나로 초기 동작을 바꿔 모든 에코를 억제할 수 있어요.

  • 설정 파일에 IRB.conf[:ECHO] = false 추가. (이 항목의 기본값은 nil인데 true와 같아요.)
  • 커맨드라인 옵션 --noecho 사용. (기본은 --echo.)

세션 중에는 설정 메서드 conf.echo= (true나 false로 설정)로 현재 설정을 바꿀 수 있어요.

위에서 말했듯 기본적으로 IRB는 모든 입력 명령이 돌려준 값들을 출력해요. 하지만 IRB는 할당문(assignment)이 돌려준 값에는 특별한 처리를 제공해요:

  • 잘림(truncation)과 함께 출력 (한 줄 출력에 맞추기). 이것이 기본이에요. 잘림을 나타내는 생략 부호 ...가 붙어요: irb(main):001> x = 'abc' * 100"abcabcabcabc..."
  • (길이와 무관하게) 전체 출력.
  • 억제 (전혀 출력하지 않음).

다음 중 하나로 초기 동작을 바꿀 수 있어요.

  • 설정 파일에 IRB.conf[:ECHO_ON_ASSIGNMENT] = false 추가. (이 항목의 기본값은 nil인데 :truncate와 같아요.)
  • 커맨드라인 옵션 --noecho-on-assignment 또는 --echo-on-assignment 사용. (기본은 --truncate-echo-on-assignment.)

세션 중에는 설정 메서드 conf.echo_on_assignment= (true, false, 또는 :truncate로 설정)로 현재 설정을 바꿀 수 있어요.

기본적으로 IRB는 inspect 메서드를 호출해서 반환값을 형식화해요. 다음 중 하나로 초기 동작을 바꿀 수 있어요.

  • 설정 파일에 IRB.conf[:INSPECT_MODE] = false 추가. (이 항목의 기본값은 true.)
  • 커맨드라인 옵션 --noinspect 사용. (기본은 --inspect.)

세션 중에는 메서드 conf.inspect_mode=로 설정을 바꿀 수 있어요.

다중 줄 출력 (Multiline Output)

기본적으로 IRB는 다중 줄 응답 앞에 개행을 붙여요. 초기 기본값은 설정 파일에:

IRB.conf[:NEWLINE_BEFORE_MULTILINE_OUTPUT] = false

를 추가해서 바꿀 수 있어요. 세션 중에는 메서드 conf.newline_before_multiline_output?conf.newline_before_multiline_output=로 값을 가져오거나 설정할 수 있어요.

예시:

irb(main):001> conf.inspect_mode = false
=> false
irb(main):002> "foo\nbar"
=>
foo
bar
irb(main):003> conf.newline_before_multiline_output = false
=> false
irb(main):004> "foo\nbar"
=> foo
bar

평가 기록 (Evaluation History)

기본적으로 IRB는 평가(반환값) 기록을 저장하지 않고, 관련 메서드 conf.eval_history, _, __는 정의되지 않아요.

다음으로 그 기록을 켜고 저장할 최대 평가 수를 설정할 수 있어요.

  • 설정 파일에서 IRB.conf[:EVAL_HISTORY] = n 추가. (아래 예시는 IRB.conf[:EVAL_HISTORY] = 5를 추가했다고 가정.)
  • 세션에서 (언제든) conf.eval_history = n.

n이 0이면 모든 평가 기록이 저장돼요. 위 중 하나를 하면:

  • 평가 기록의 최대 크기를 설정하고, 최대 크기 n을 돌려주는 메서드 conf.eval_history를 정의해요: conf.eval_history = 5 → 5, conf.eval_history → 5.
  • 가장 최근의 평가를 담거나 (없으면 nil) 담은 변수 _를 정의해요. conf.last_value 메서드와 같아요: _ → 5, :foo:foo, :bar:bar, _:bar.
  • 변수 __를 정의해요. 꾸밈 없는 __는 모든 평가 기록을 담아요. __[m] (양의 m): 주어진 줄 번호의 평가를 담거나, 그 줄 번호가 평가 기록에 없으면 nil. __[-m] (음의 m): 뒤에서 m번째 평가를 담거나 없으면 nil. __[0]nil.

프롬프트와 반환 형식 (Prompt and Return Formats)

기본적으로 IRB는 :DEFAULT 프롬프트 모드에 정의된 프롬프트와 반환값 형식을 사용해요.

기본 프롬프트와 반환 형식 (The Default Prompt and Return Format)

기본 프롬프트와 반환값은 이렇게 보여요.

irb(main):001> 1 + 1
=> 2
irb(main):002> 2 + 2
=> 4

프롬프트는 다음을 포함해요.

  • 실행 중인 프로그램의 이름 (irb). "IRB Name" 참고.
  • 현재 세션의 이름 (main). "IRB Sessions" 참고.
  • 3자리 줄 번호 (1부터 시작).

기본 프롬프트는 실제로 세 가지 형식을 정의해요.

  • 대부분의 상황용 (위와 같음): irb(main):003> DirDir
  • 입력 명령이 문장 연속(statement continuation)일 때 (끝에 별표 추가): irb(main):004* Dir.
  • 입력 명령이 문자열 연속(string continuation)일 때 (끝에 단일 따옴표 추가): irb(main):005' Dir.entries('.

다음을 입력하면서 프롬프트가 바뀌는 걸 볼 수 있어요.

irb(main):001* Dir.entries('.').select do |entry|
irb(main):002*   entry.start_with?('R')
irb(main):003> end
=> ["README.md", "Rakefile"]
미리 정의된 프롬프트 (Pre-Defined Prompts)

IRB에는 해시 IRB.conf[:PROMPT]에 저장된 여러 미리 정의된 프롬프트가 있어요.

irb(main):001> IRB.conf[:PROMPT].keys
=> [:NULL, :DEFAULT, :CLASSIC, :SIMPLE, :INF_RUBY, :XMP]

이들의 전체 데이터를 보려면 IRB.conf[:PROMPT]를 입력하세요. 대부분의 프롬프트 정의는 IRB 이름, 세션 이름, 줄 번호 같은 값을 나타내는 지정자를 포함해요. "Prompt Specifiers" 참고.

다음 중 하나로 초기 프롬프트와 반환 형식을 바꿀 수 있어요.

  • 설정 파일에 IRB.conf[:PROMPT] = mode 추가. mode는 프롬프트 모드의 심볼 이름이에요.
  • 커맨드라인 옵션: --prompt mode는 프롬프트 모드를 mode로 설정. --simple-prompt--sample-book-mode는 프롬프트 모드를 :SIMPLE로 설정. --inf-ruby-mode는 프롬프트 모드를 :INF_RUBY로 설정하고 --multiline--singleline 둘 다를 억제. --noprompt는 프롬프트를 억제하고 에코에는 영향 없음.

현재 프롬프트 모드는 메서드 conf.prompt_modeconf.prompt_mode=로 가져오거나 설정할 수 있어요.

커스텀 프롬프트 (Custom Prompts)

IRB 세션에서든 설정 파일에서든 커스텀 프롬프트와 반환 형식을 정의할 수 있어요. IRB의 프롬프트는 위에서 봤듯 실제로 세 개의 프롬프트를 정의해요. 간단한 커스텀 데이터를 위해 세 개를 모두 같게 만들게요.

irb(main):001* IRB.conf[:PROMPT][:MY_PROMPT] = {
irb(main):002*   PROMPT_I: ': ',
irb(main):003*   PROMPT_C: ': ',
irb(main):004*   PROMPT_S: ': ',
irb(main):005*   RETURN: '=> '
irb(main):006> }
=> {:PROMPT_I=>": ", :PROMPT_C=>": ", :PROMPT_S=>": ", :RETURN=>"=> "}

설정 파일에서 커스텀 프롬프트를 정의했다면, 다음을 추가해서 현재 프롬프트로 만들 수도 있어요.

IRB.conf[:PROMPT_MODE] = :MY_PROMPT

어디에서 정의했든 세션에서 현재 프롬프트로 만들 수 있어요.

conf.prompt_mode = :MY_PROMPT

현재 프롬프트 데이터는 다음의 다양한 설정 메서드로 보거나 수정할 수 있어요.

  • conf.prompt_mode, conf.prompt_mode=.
  • conf.prompt_c, conf.c=.
  • conf.prompt_i, conf.i=.
  • conf.prompt_s, conf.s=.
  • conf.return_format, return_format=.
프롬프트 지정자 (Prompt Specifiers)

프롬프트 정의는 특정 값이 치환되는 지정자를 포함할 수 있어요.

  • %N: 실행 중인 프로그램의 이름.
  • %m: self.to_s의 값.
  • %M: self.inspect의 값.
  • %l: 문자열의 타입 표시. ", ', /, ] 중 하나.
  • %NNi: 들여쓰기 레벨. NN은 들여쓰기 레벨의 자리 수를 지정하는 2자리 숫자 (03001이 됨).
  • %NNn: 줄 번호. NN은 줄 번호의 자리 수를 지정하는 2자리 숫자 (03001이 됨).
  • %%: 리터럴 %.

상세도 (Verbosity)

기본적으로 IRB의 상세도(verbosity)는 비활성화되어 있어서 출력이 더 작아요. 다음으로 상세도를 활성화할 수 있어요.

  • 설정 파일에 IRB.conf[:VERBOSE] = true 추가 (기본값은 nil).
  • 커맨드라인 옵션 --verbose 사용 (기본은 --noverbose).

세션 중에는 메서드 conf.verboseconf.verbose=로 상세도를 가져오거나 설정할 수 있어요.

도움말 (Help)

커맨드라인 옵션 --help는 IRB가 도움말 텍스트를 출력하고 종료하게 해요.

버전 (Version)

커맨드라인 옵션 --version은 IRB가 버전 텍스트를 출력하고 종료하게 해요.

입력과 출력 (Input and Output)

색상 강조 (Color Highlighting)

기본적으로 IRB 색상 강조는 활성화되어 있고, 둘 다에 사용돼요.

  • 입력: 입력하는 동안 IRB는 입력한 문자를 읽고 인식하는 요소를 강조해요. 짝이 맞지 않는 괄호 같은 오류도 강조해요.
  • 출력: IRB는 문법적 요소를 강조해요.

다음으로 색상 강조를 비활성화할 수 있어요.

  • 설정 파일에 IRB.conf[:USE_COLORIZE] = false 추가 (기본값은 true).
  • 커맨드라인 옵션 --nocolorize 사용.

디버깅 (Debugging)

커맨드라인 옵션 -d는 변수 $VERBOSE$DEBUGtrue로 설정해요. 이들이 IRB 출력에는 영향을 주지 않아요.

경고 (Warnings)

커맨드라인 옵션 -w는 경고를 억제해요. 커맨드라인 옵션 -W[level]는 경고 레벨을 설정해요.

  • 0=침묵
  • 1=중간
  • 2=상세

기타 기능 (Other Features)

모듈 로드 (Load Modules)

시작할 때 require할 모듈의 이름을 지정할 수 있어요. 배열 conf.load_modules는 세션 시작 중에 require할 모듈을 (있으면) 결정해요. 배열은 세션 시작 중에만 사용되므로 초기 값만 중요해요. 초기 기본값은 [] (모듈 로드 안 함)이에요.

irb(main):001> conf.load_modules
=> []

다음으로 초기 기본값을 설정할 수 있어요.

  • 커맨드라인 옵션 -r: $ irb -r csv -r jsonconf.load_modules["csv", "json"].
  • 해시 항목 IRB.conf[:LOAD_MODULES] = array: IRB.conf[:LOAD_MODULES] = %w[csv, json].

설정 파일 항목이 커맨드라인 옵션을 덮어쓴다는 점을 기억하세요.

RI 문서 디렉터리 (RI Documentation Directories)

시작할 때 (기본 디렉터리 외에) 로드할 RI 문서 디렉터리의 경로를 지정할 수 있어요. ri --help를 입력하면 RI에 관한 자세한 내용을 볼 수 있어요.

배열 conf.extra_doc_dirs는 세션 시작 중에 로드할 디렉터리를 (있으면) 결정해요. 배열은 세션 시작 중에만 사용되므로 초기 값만 중요해요. 초기 기본값은 [] (추가 문서 로드 안 함)이에요.

irb(main):001> conf.extra_doc_dirs
=> []

다음으로 초기 기본값을 설정할 수 있어요.

  • 커맨드라인 옵션 --extra-doc-dir: $ irb --extra-doc-dir your_doc_dir --extra-doc-dir my_doc_dirconf.extra_doc_dirs["your_doc_dir", "my_doc_dir"].
  • 해시 항목 IRB.conf[:EXTRA_DOC_DIRS] = array: IRB.conf[:EXTRA_DOC_DIRS] = %w[your_doc_dir my_doc_dir].

설정 파일 항목이 커맨드라인 옵션을 덮어쓴다는 점을 기억하세요.

IRB 이름 (IRB Name)

IRB의 이름을 지정할 수 있어요. 초기 기본값은 'irb'예요.

irb(main):001> conf.irb_name
=> "irb"

초기 기본값은 해시 항목 IRB.conf[:IRB_NAME] = string으로 설정할 수 있어요.

IRB.conf[:IRB_NAME] = 'foo'

애플리케이션 이름 (Application Name)

IRB 세션의 애플리케이션 이름을 지정할 수 있어요. 초기 기본값은 'irb'예요.

irb(main):001> conf.ap_name
=> "irb"

초기 기본값은 해시 항목 IRB.conf[:AP_NAME] = string으로 설정할 수 있어요.

IRB.conf[:AP_NAME] = 'my_ap_name'

설정 모니터 (Configuration Monitor)

설정 파일에서 IRB.conf[:IRB_RC]에 proc을 할당해서 설정 변경을 모니터할 수 있어요.

IRB.conf[:IRB_RC] = proc {|conf| puts conf.class }

설정이 바뀔 때마다 그 proc이 인자 conf와 함께 호출돼요.

인코딩 (Encodings)

커맨드라인 옵션 -E ex[:in]은 초기 외부(ex) 및 내부(in) 인코딩을 설정해요. 커맨드라인 옵션 -U는 둘 다 UTF-8로 설정해요.

명령 (Commands)

사용 가능한 명령 목록을 보려면 help 명령을 사용하세요.

IRB 세션 (IRB Sessions)

IRB는 한 번에 많은 세션을 관리할 수 있게 해 주는 특별한 기능이 있어요. Irb.irb로 새 세션을 만들고, 프롬프트에서 jobs 명령으로 현재 세션 목록을 얻을 수 있어요.

설정 (Configuration)

커맨드라인 옵션 또는 IRB.confIrb.irb의 기본 동작을 지정해요. 반면 IRB의 "커맨드라인 옵션"에 있는 각 confIRB.irb를 개별적으로 설정하는 데 사용돼요. IRB.conf[:IRB_RC]에 proc이 설정되면, 현재 세션의 컨텍스트를 인자로 하여 그 proc이 호출돼요. 이 메커니즘으로 각 세션을 설정할 수 있어요.

세션 변수 (Session variables)

모든 Irb 세션에는 유용한 변수 몇 개가 있어요.

  • _: 실행한 명령의 값. 지역 변수로 __
  • __: 평가된 명령의 기록. IRB.conf[:EVAL_HISTORY]nil이 아닐 때만 사용 가능 (이것이 기본). IRB::Context#eval_history=IRB::History도 참고.
  • __[line_no]: 주어진 줄 번호 line_no의 평가 값을 돌려줘요. line_no가 음수이면 가장 최근 반환값보다 line_no줄 전의 반환값을 돌려줘요.

제약 (Restrictions)

IRB에 입력된 Ruby 코드는 파일의 Ruby 코드와 같게 동작해요. 단, 다음은 제외해요.

  • IRB는 입력이 문법적으로 완전해지면 즉시 평가하므로, 어떤 결과는 약간 다를 수 있어요.
  • 포킹(forking)은 잘 동작하지 않을 수 있어요.

Constants (상수)

  • ExtendCommand
  • TOPLEVEL_BINDING

Public Class Methods

start (ap_path = nil)

IRB를 초기화하고 TOPLEVEL_BINDING에 새 Irb.irb 객체를 만들어요.

Private Class Methods

easter_egg (type = nil)

easter_egg_logo (type)