종종 나는 다음을 수행합니다.
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: "
답변
확실히 하나의 라이너 해킹. 우아함 … 정확히 아닙니다.
input = [(print 'Name: '), gets.rstrip][1]
답변
나는이 질문이 오래되었다는 것을 알고 있지만 입력을 얻는 표준 방법으로 사용하는 것을 보여줄 것입니다.
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? "
답변
@Bryn의 리드를 따르십시오.
def prompt(default, *args)
print(*args)
result = gets.strip
return result.empty? ? default : result
end
답변
제안 된 솔루션의 문제점은 입력을 읽고, 제거하고, 할당 할 때까지 인쇄 할 문자열을 작성할 수 없다는 것입니다. 세미콜론으로 각 줄을 구분할 수 있습니다.
$ ruby -e 'print "Input text: "; input=gets.strip; puts input'
Input text: foo
foo
답변
나는 우연히 Inquirer gem을 찾았고 정말 마음에 들었습니다. 자체 입력 유효성 검사가 부족하지만 Highline보다 더 깔끔하고 사용하기 쉽습니다.
당신의 예는 다음과 같이 작성할 수 있습니다.
require 'inquirer'
inputs = Ask.input 'Input text'