78 votes

Une seule ligne en Ruby pour afficher une invite, obtenir une entrée et l'assigner à une variable ?

Je me retrouve souvent à faire ce qui suit :

print "Input text: "
input = gets.strip

Existe-t-il une manière élégante de faire cela en une seule ligne ? Quelque chose comme :

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

Le problème est qu'il attend la saisie avant d'afficher l'invite. Avez-vous une idée ?

77voto

Marc-André Lafortune Points 34140

Vérifiez highline :

require "highline/import"
input = ask "Input text: "

74voto

Bryn Points 291

Je pense que quelque chose comme ce que Marc-André a suggéré sera la voie à suivre, mais pourquoi introduire une tonne de code quand vous pouvez simplement définir une fonction de deux lignes en haut de n'importe quel script que vous allez utiliser :

def prompt(*args)
    print(*args)
    gets
end

name = prompt "Input name: "

32voto

rbnewb Points 371

Une pirouette à une ligne, c'est sûr. Gracieux... enfin pas exactement.

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

13voto

addison Points 466

Je sais que cette question est ancienne, mais j'ai pensé que je pourrais montrer ce que j'utilise comme méthode standard pour obtenir des donné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 bizarres à la fin ou au début, il les supprimera, et il garde un historique de ce qu'il a entré dans le passé (Changez la fonction true a false pour qu'il ne le fasse pas.). Et, si ARGV n'est pas vide, alors gets essaiera de lire depuis un fichier dans ARGV au lieu d'obtenir des informations. En plus, Readline fait partie de la bibliothèque standard de Ruby, vous n'avez donc pas besoin d'installer de gemmes. De plus, vous ne pouvez pas déplacer votre curseur lorsque vous utilisez la fonction gets mais vous pouvez avec Readline .

Et je sais que la méthode n'est pas en une ligne, mais elle l'est quand on l'appelle.

name = input "What is your name? "

12voto

Tiago Fernandez Points 505

Je suis l'exemple de @Bryn :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X