종종 나는 다음을 수행합니다.
print "Input text: "
input = gets.strip
한 줄로이 작업을 수행하는 우아한 방법이 있습니까? 다음과 같은 것 :
puts "Input text: #{input = gets.strip}"
이것의 문제점은 프롬프트를 표시하기 전에 입력을 기다린다는 것입니다. 어떤 아이디어?
종종 나는 다음을 수행합니다.
print "Input text: "
input = gets.strip
한 줄로이 작업을 수행하는 우아한 방법이 있습니까? 다음과 같은 것 :
puts "Input text: #{input = gets.strip}"
이것의 문제점은 프롬프트를 표시하기 전에 입력을 기다린다는 것입니다. 어떤 아이디어?
답변:
highline 확인 :
require "highline/import"
input = ask "Input text: "
나는 Marc-Andre가 제안한 것과 같은 것을 사용하는 것이 갈 길이라고 생각하지만, 사용할 스크립트의 맨 위에 두 줄 함수를 정의 할 수 있는데 왜 전체 코드를 가져와야합니까? :
def prompt(*args)
print(*args)
gets
end
name = prompt "Input name: "
.chomp
후에 방법을 gets
, 그렇지 않으면 변수가 포함됩니다 \n
끝에 개행 문자를.
나는이 질문이 오래되었다는 것을 알고 있지만 입력을 얻는 표준 방법으로 사용하는 것을 보여줄 것입니다.
require 'readline'
def input(prompt="", newline=false)
prompt += "\n" if newline
Readline.readline(prompt, true).squeeze(" ").strip
end
사용자가 끝이나 처음에 이상한 공간을 추가하는 경우, 그것은 사람들을 제거하는 것이기 때문에 이것은 정말 좋은이며, 그들이 과거에 입력 한의 역사를 유지 (변경을 true
에 false
그것은 그렇게하지에.). 그리고이 ARGV
비어 있지 않으면 입력을받는 대신 gets
에서 파일을 읽으려고합니다 ARGV
. 또한 Readline
Ruby 표준 라이브러리의 일부이므로 gem을 설치할 필요가 없습니다. 또한를 사용할 때는 커서를 이동할 수 gets
없지만 Readline
.
그리고 방법이 한 줄이 아니라는 것을 알고 있습니다.
name = input "What is your name? "
Readline::readline
]는 루비 인터프리터를 종료하고 사용자가 줄을 입력하는 동안 '^ C'를 눌렀을 때 터미널 상태를 반환하지 않습니다."
highline/import
제안 된 솔루션의 문제점은 입력을 읽고, 제거하고, 할당 할 때까지 인쇄 할 문자열을 작성할 수 없다는 것입니다. 세미콜론으로 각 줄을 구분할 수 있습니다.
$ ruby -e 'print "Input text: "; input=gets.strip; puts input'
Input text: foo
foo