Souvent, je me retrouve à faire ce qui suit:
print "Input text: "
input = gets.strip
Existe-t-il un moyen gracieux de le faire en une seule ligne? Quelque chose comme:
puts "Input text: #{input = gets.strip}"
Le problème est qu'il attend l'entrée avant d'afficher l'invite. Des idées?
Découvrez highline :
require "highline/import"
input = ask "Input text: "
Je pense que partir avec quelque chose comme ce que Marc-Andre a suggéré sera le chemin à parcourir, mais pourquoi apporter une tonne de code lorsque vous pouvez simplement définir une fonction à deux lignes en haut du script que vous allez utiliser :
def Prompt(*args)
print(*args)
gets
end
name = Prompt "Input name: "
Un liner hack sûr. Gracieux ... enfin pas exactement.
input = [(print 'Name: '), gets.rstrip][1]
Suivant l'exemple de Bryn:
def Prompt(default, *args)
print(*args)
result = gets.strip
return result.empty? ? default : result
end
Je sais que cette question est ancienne, mais je pensais que je montrerais ce que j'utilise comme méthode standard pour obtenir des entrées.
require 'readline'
def input(Prompt="", newline=false)
Prompt += "\n" if newline
Readline.readline(Prompt, true).squeeze(" ").strip
end
C'est vraiment bien parce que si l'utilisateur ajoute des espaces étranges à la fin ou au début, il les supprimera et gardera un historique de ce qu'ils ont entré dans le passé (changez le true
en false
pour ne pas le faire.). Et, si ARGV
n'est pas vide, alors gets
essaiera de lire à partir d'un fichier dans ARGV
, au lieu d'obtenir une entrée. De plus, Readline
fait partie de la bibliothèque standard Ruby afin que vous n'ayez pas à installer de gemmes. De plus, vous ne pouvez pas déplacer votre curseur lorsque vous utilisez gets
, mais vous pouvez avec Readline
.
Et, je sais que la méthode n'est pas une ligne, mais c'est quand vous l'appelez
name = input "What is your name? "
Le problème avec votre solution proposée est que la chaîne à imprimer ne peut pas être créée tant que l'entrée n'est pas lue, supprimée et affectée. Vous pouvez séparer chaque ligne par un point-virgule:
$ Ruby -e 'print "Input text: "; input=gets.strip; puts input'
Input text: foo
foo
J'ai trouvé le Inquirer bijou par hasard et je l'aime vraiment, je le trouve beaucoup plus soigné et facile à utiliser que Highline, bien qu'il manque de validation d'entrée par lui-même.
Votre exemple peut être écrit comme ceci
require 'inquirer'
inputs = Ask.input 'Input text'