Équivalent de "pass" dans Ruby
En python, il existe un mot clé pass
pour définir une fonction vide, condition, loop,...
Y a-t-il quelque chose de similaire pour Ruby?
Exemple Python:
def some_function():
# do nothing
pass
6 réponses
Non, il n'y a pas une telle chose dans Ruby. Si vous voulez un bloc vide, la méthode, module, etc classe., il suffit d'écrire un bloc vide:
def some_method
end
C'est ça.
En Python, chaque bloc est nécessaire pour contenir , au moins un énoncé, c'est pourquoi vous avez besoin d'un "faux" no-op déclaration. Ruby n'a pas d'instructions , Il n'a que des expressions, et il est parfaitement légal pour un bloc de contenir zéro expression.
Vous avez toujours end
instructions, donc pass
n'est pas nécessaire.
Exemple Ruby:
def some_function()
# do nothing
end
nil
est probablement l'équivalent de ça:
def some_function
nil
end
Une façon dont c'est fondamentalement utile est quand sauver n'importe quoi mais ne rien faire à ce sujet:
Process.kill('CONT', pid) rescue nil
Au lieu de faire
begin
Process.kill('CONT')
rescue
end
Et cela provoquerait une erreur de syntaxe:
> throw :x rescue
SyntaxError: (irb):19: syntax error, unexpected end-of-input
from /usr/bin/irb:11:in `<main>'
Notes:
def some_function; end; some_function
serait toujours retour nil
.
def a; :b; begin; throw :x; rescue; end; end; a;
serait également toujours retourner nil
.
Fonctions et classes à une seule ligne
def name ; end
class Name ; end
Fonctionne très bien pour pseudo - .
Comme répondu avant tout dans ruby est une expression donc il est bon de la laisser vide .
def name
end
class Name
end
Une alternative ruby pour les programmeurs python qui aiment le mot clé pass
def pass
end
# OR
def pass; end
Notez qu'il est inutile de le faire dans Ruby car il permet des méthodes vides mais si vous êtes si désireux de pass
, c'est le plus simple et le plus propre alternative.
Et maintenant vous pouvez utiliser cette fonction dans n'importe quel bloc et cela fonctionnera de la même manière.
def name
pass
end
# OR
class Name
pass
end
Gardez à l'esprit que passer, c'est une fonction qui renvoie, donc, c'est à vous comment vous pouvez l'utiliser.
Si vous voulez être en mesure de l'utiliser librement avec n'importe quel nombre d'arguments, vous devez avoir un petit truc sur les arguments:
def gobble *args, ≺ end
Comme d'autres l'ont dit, dans Ruby, vous pouvez simplement laisser un corps de méthode vide. Cependant, cela pourrait s'avérer un peu différent de ce que Python accomplit avec pass
.
Dans Ruby, tout est un objet. L'absence de valeur, que certains langages de programmation indiquent avec null
ou nil
est en fait un objet de NilClass
dans Ruby.
Considérons l'exemple suivant (en irb
):
class A
def no_op
end
end
A.new.no_op
# => nil
A.new.no_op.class
# => NilClass
A.new.no_op.nil?
# => true
Voici la documentation de Ruby NilClass pour référence.
Je crois que Python {[1] } est utilisé principalement pour surmonter les limitations syntaxiques du langage( indentation), bien que je ne sois pas expérimenté en Python.