Ruby의 콘솔에서 입력을 읽습니까?


115

루비로 간단한 A + B 프로그램을 작성하고 싶지만 콘솔로 작업하는 방법을 모르겠습니다.


10
나는 Ruby에 대해 이야기하고 있지만 ROR은 아닙니다. 콘솔에서 입력에 대한 단어가 없습니다.
Sergey

답변:


228

당신은 말하고 gets있습니까?

puts "Enter A"
a = gets.chomp
puts "Enter B"
b = gets.chomp
c = a.to_i + b.to_i
puts c

그런 거요?

최신 정보

Kernel.gets에서 찾은 매개 변수를 읽으려고 시도하고 찾을 ARGV수없는 경우에만 콘솔을 요청합니다 ARGV. ARGV비어 있지 않은 경우에도 콘솔에서 읽도록 강제하려면STDIN.gets


59
이 솔루션과 충돌이 있습니다. Kernel.gets에서 찾은 파일을 읽고 찾을 ARGV수없는 경우에만 콘솔에 요청합니다 ARGV. ARGV비어 있지 않더라도 콘솔에서 읽도록 강제하려면을 사용하십시오 STDIN.gets.
fguillen 2012 년

3
a.to_i그리고 b.to_i더 좋을 수
도리안

되어 gets차단? 그렇지 않은 경우 차단하는 대체품이 있습니까?
noMAD

1
@fguillen은 훌륭한 답변이며 댓글에 숨겨서는 안됩니다. 대답 해 주시겠습니까? 감사!
Dan Rosenstark 2013

2
@Yar 제안에 감사 드리며 답변 자체에 업데이트 를 추가했습니다 .
fguillen

28

명령 줄을 통해 매개 변수를 전달할 수도 있습니다. 명령 줄 인수는 ARGV 배열에 저장됩니다. 따라서 ARGV [0]은 첫 번째 숫자이고 ARGV [1]은 두 번째 숫자입니다.

#!/usr/bin/ruby

first_number = ARGV[0].to_i
second_number = ARGV[1].to_i

puts first_number + second_number

그리고 당신은 이것을 이렇게 부릅니다

% ./plus.rb 5 6
==> 11

10

사용자로부터 입력을받는 방법에는 여러 가지가 있습니다. 나는 개인적으로 방법을 사용하는 것을 좋아합니다. gets를 사용 하면 입력 한 문자열 을 가져 오며 여기에는 입력 을 끝내기 위해 누른 ENTER 키가 포함됩니다 .

name = gets
"mukesh\n"

irb 에서 이것을 볼 수 있습니다 . 이것을 입력하면 ENTER 키가 생성하는 "개행"문자 인 \ n name = gets이 표시됩니다 . 입력 하면 다음과 같은 내용이 표시됩니다 . chomp 방법을 사용하여 "mukesh\n" 성가신 개행 문자를 제거 할 수 있습니다 .

chomp 메서드는 문자열을 되돌려 주지만 줄 바꿈을 끝내지 않습니다. 아름다운 씹는 방법 생명 구세주.

name = gets.chomp
"mukesh"

터미널을 사용하여 입력을 읽을 수도 있습니다. ARGVObject 클래스에 정의 된 상수 입니다. Array 클래스 의 인스턴스이며 모든 배열 메서드에 액세스 할 수 있습니다. 배열이기 때문에 상수 임에도 불구하고 문제없이 요소를 수정하고 지울 수 있습니다. 기본적으로 Ruby는 명령 줄 바이너리가 호출 될 때 Ruby 프로그램에 전달 된 모든 명령 줄 인수 (공백으로 분할)를 캡처하여 ARGV 배열에 문자열로 저장합니다 .

Ruby 프로그램 내에서 작성되면 ARGV 는 다음과 같은 명령 줄 명령을받습니다.

test.rb hi my name is mukesh

다음과 같은 배열을 만듭니다.

["hi", "my", "name", "is", "mukesh"]

그러나 제한된 입력을 전달하려면 다음과 같이 사용할 수 있습니다.

test.rb 12 23

프로그램에서 다음과 같은 입력을 사용하십시오.

a = ARGV[0]
b = ARGV[1]

5

터미널의 인수를 유지하려면 다음 코드를 시도하십시오.

A = ARGV[0].to_i
B = ARGV[1].to_i

puts "#{A} + #{B} = #{A + B}"

0

대화 형 콘솔을 만들려면 :

#!/usr/bin/env ruby

require "readline"
addends = []
while addend_string = Readline.readline("> ", true)
  addends << addend_string.to_i
  puts "#{addends.join(' + ')} = #{addends.sum}"
end

사용법 (위의 스 니펫을 summator현재 디렉토리의 파일에 넣었다고 가정 ) :

chmod +x summator
./summator
> 1
1 = 1
> 2
1 + 2 = 3

Ctrl + D종료하는 데 사용

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.