Quand je fais quelque chose comme ça dans les rails:
irb(main):060:0> conf.echo = false
La console évaluera les utilisateurs
et l'imprimera (peut-être avec inspect
, ou to_s
, je ne suis pas sûr à 100%). Il en résulte des centaines de lignes de sortie que je ne veux pas vraiment.
Je sais que je peux faire quelque chose comme ça pour empêcher la sortie sur une ligne spécifique:
irb(main):060:0> users = User.where(name: "Joe"); nil
3 Réponses :
Je suppose que cela est dû au fait que dans Ruby, l’affectation renvoie automatiquement la valeur attribuée, c'est-à-dire
a = 1 #=> 1
Si vous fouillez dans la documentation de conf.echo
, vous verra qu'il est utilisé pour contrôler quoi que ce soit pour afficher la valeur de retour ou non.
Créez un fichier nommé .irbrc
dans votre dossier ~
ou dans votre dossier actuel. À l'intérieur, ajoutez:
IRB.conf[:ECHO] = false
Cela devrait désactiver l'écho.
Si vous placez IRB.conf
, vous verrez d'autres paramètres que vous pouvez ajuster comme bien.
Plus d'informations se trouvent dans le documentation irb
Ce n'est pas tout à fait ce qui est demandé. Ils veulent uniquement supprimer la sortie des affectations.
@SergioTulentsev c'est une bonne distinction, je l'ai passé sous silence pendant que je lisais. Je ne pense pas qu'il existe un paramètre pour ce comportement dans IRB, mais cela pourrait être suffisant pour le moment. J'ajoute simplement un ;
après une instruction (en pry) quand je veux supprimer la sortie
Une version du MR référencée ci-dessous a été fusionnée avec irb, mais a été modifiée à quelques reprises depuis. Donc, pour obtenir le comportement souhaité, cela dépend de la version irb:
Si vous avez au moins 1.2.0
, mais moins de 1.2.6
: le comportement par défaut est de ne rien imprimer pour les instructions d'affectation. Vous devez définir IRB.conf [: ECHO_ON_ASSIGNMENT] = true
si vous voulez l'ancien comportement (de toujours tout imprimer).
Si vous avez 1.2.6 , la valeur par défaut de
ECHO_ON_ASSIGNMENT
a été remplacée par true
, et une nouvelle valeur de configuration: OMIT_ON_ASSIGNMENT
a été ajoutée, ce qui tronquera la sortie longue pour instructions d'affectation, la valeur par défaut est true
. Vous devez donc définir IRB.conf [: ECHO_ON_ASSIGNMENT] = false
si vous ne voulez rien afficher pour les instructions d'affectation. Vous devez définir IRB.conf [: OMIT_ON_ASSIGNMENT] = false
si vous voulez l'ancien comportement (de toujours tout imprimer).
Si vous avez 1.2.7 ou supérieur,
OMIT_ON_ASSIGNMENT
a été supprimé pour permettre à ECHO_ON_ASSIGNMENT
d'accepter true
, false
ou : truncate
, la valeur par défaut étant : truncate
. Une valeur de true
imprimera tout pour les instructions d'affectation, false
n'imprimera rien et : truncate
imprimera une version tronquée (comme le paramètre OMIT_ON_ASSIGNMENT
à true
dans 1.2.6
).
Notez que les versions ci-dessus des versions de irb em > gem, pas les versions ruby (même si irb
est inclus dans la bibliothèque standard de ruby). Vous pouvez vérifier quelle version de irb
vous avez en regardant IRB :: VERSION
. Les très anciennes versions de irb
ne définissent pas cette constante, donc si elle est manquante, vous avez certainement une version inférieure à 1.2.0
.
Jusqu'à cette demande d'extraction (ou une demande similaire ) est fusionné, vous pouvez mettre ce qui suit dans votre fichier ~ / .irbrc
:
require 'ripper' module IRB class Irb ASSIGNMENT_NODE_TYPES = [:assign, :opassign, :massign] def assignment_expression?(line) ASSIGNMENT_NODE_TYPES.include?(Ripper.sexp(line)&.dig(1,-1,0)) end def output_value # :nodoc: return if assignment_expression?(@context.last_line) printf @context.return_format, @context.inspect_last_value end end class Context attr_accessor :last_line def evaluate(line, line_no, exception: nil) # :nodoc: @line_no = line_no @last_line = line if exception line = "begin ::Kernel.raise _; rescue _.class; #{line}; end" @workspace.local_variable_set(:_, exception) end set_last_value(@workspace.evaluate(self, line, irb_path, line_no)) end end end
Notez que depuis ce monkey-patches IRB :: Irb
et IRB :: Context
, il n'y a aucune garantie qu'il sera compatible avec les versions futures.
Python se comporte de cette façon car l'affectation est une instruction (c'est-à-dire qu'elle n'a pas de valeur). Dans l'affectation ruby est une expression, avec tout ce que cela implique.
@SergioTulentsev ouais, je vois ce que tu dis. De plus, si une expression python renvoie
Aucun
, la console n'imprime rien. J'ai juste avec il y avait un moyen d'empêcher irb d'imprimer la sortie d'une expression si l'expression était une affectation