Une ligne dans Ruby pour afficher une invite, obtenir des entrées et assigner une variable?

Souvent, je me trouve à faire ce qui suit:

print "Input text: " input = gets.ssortingp 

Existe-t-il une manière gracieuse de le faire en une seule ligne? Quelque chose comme:

 puts "Input text: #{input = gets.ssortingp}" 

Le problème avec cela 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 qu’aller avec quelque chose comme ce que Marc-André a suggéré va être la voie à suivre, mais pourquoi apporter une tonne de code quand 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 paquebot piraté. Gracieuse … enfin pas exactement.

 input = [(print 'Name: '), gets.rssortingp][1] 

À la suite de @ Bryn:

 def prompt(default, *args) print(*args) result = gets.ssortingp return result.empty? ? default : result end 

Je sais que cette question est ancienne, mais je pense que je montrerais ce que j’utilise comme méthode standard pour obtenir des commentaires.

 require 'readline' def input(prompt="", newline=false) prompt += "\n" if newline Readline.readline(prompt, true).squeeze(" ").ssortingp end 

C’est vraiment bien car si l’utilisateur ajoute des espaces étranges à la fin ou au début, il les supprimera et conservera un historique de ce qu’ils ont entré par le passé (modifiez le true à false pour ne pas le faire. ). Et, si ARGV n’est pas vide, ARGV essaiera de lire un fichier dans ARGV , au lieu d’obtenir des entrées. De plus, Readline fait partie de la bibliothèque standard Ruby, vous n’avez donc pas à installer de gemmes. En outre, vous ne pouvez pas déplacer votre curseur lorsque vous utilisez gets , mais vous pouvez le faire 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 construite tant que l’entrée n’est pas lue, supprimée et assignée. Vous pouvez séparer chaque ligne par un point-virgule:

 $ ruby -e 'print "Input text: "; input=gets.ssortingp; puts input' Input text: foo foo 

J’ai trouvé le joyau d’ Inquirer par hasard et je l’aime beaucoup, je le trouve beaucoup plus net et facile à utiliser que Highline, même s’il ne possède pas de validation des entrées.
Votre exemple peut être écrit comme ça

 require 'inquirer' inputs = Ask.input 'Input text'