Cela fonctionne assez bien - il suffit de vous demander s'il y a des améliorations à raccourcir?
if (ARGV[0].nil?) then input=$< else input=File.new(ARGV[0],"r"); end ... # Do something with the input here, for example: input.each_line do |line| puts line end
3 Réponses :
Vous pouvez également utiliser l'opérateur ternaire: P> alors code> et
; code> sont également facultatifs
input = ARGV[0].nil? ? $< : File.new(ARGV[0],"r")
Super - +1 - Mais j'ai voté l'autre réponse car elle est encore plus courte! Bon vieux rubis!
Seulement argv? code> fonctionne pour moi,
"r" code> normalement par défaut, donc pouvez le sauter, et
fichier.new () code> peut être identique à
fichier () code>, donc
Fichier ("FOO") ne semble plus fonctionner (Ruby 2.3.1): Nométhoderror: méthode non définie `fichier 'pour principal: objet.
Vous pouvez éliminer les cinq premières lignes entièrement.
de Pickaxe P>
$ <: un objet qui donne acc la concat du contenu de tous les fichiers donn en ligne commande arguments ou stdin le cas o il n a pas d m similaires fichier: binmode fermer ferm chacun chacun_byte chaque_line eof fichier nom fileno getc obtient lineno chemin pos lecture readcar lireline readlines rewind cherchez sautez dites to_a to_i to_io to_s avec renvoie pour actuellement lu. cela peut changer comme lit via ligne. p> BlockQuote>
Par conséquent: P>
while s = gets puts s end
De plus, vous pouvez utiliser argf code>, car c'est un alias to
$ << / code>.
Ouais - cela fonctionne bien - cela me fait me demander pourquoi je suis retourné dans des cercles la première fois pour attraper cela. Je pense que c'est peut-être à cause du comportement légèrement étrange (mais bon) que vous êtes en train de gérer «ruby myscript.rb» sans argument, que le script disparaît simplement - la plupart des programmes (certes sur Unix par exemple) s'asseoir et attendre STDIN: Je suppose donc que j'ai supposé que je devais mettre en œuvre quelque chose là-bas - mais en fait (merci pour la description), l'interprète Ruby fait quelque chose de très utile et assez intelligent (comme d'habitude) là-bas! Merci.
Je suis juste là avec toi. Je m'habitue toujours à (et à découvrir) toutes ces petites astuces de rubis.