Dans python il y a un mot clé pass
pour définir une fonction vide, une condition, une boucle, ... Y a-t-il quelque chose de similaire pour Ruby?
Exemple Python:
def some_function():
# do nothing
pass
Vous avez toujours des instructions end
, donc pass
n'est pas nécessaire.
Exemple Ruby:
def some_function()
# do nothing
end
Non, il n'y a rien de tel en Ruby. Si vous voulez un bloc, une méthode, un module, une classe, etc. vide, écrivez simplement un bloc vide:
def some_method
end
C'est ça.
En Python, chaque bloc est obligatoire pour contenir au moins une instruction, c'est pourquoi vous avez besoin d'une "fausse" instruction no-op. Ruby ne fait pas avoir instructions, il n'a que des expressions, et il est parfaitement légal qu'un bloc contienne zéro expression.
nil
en est probablement l'équivalent:
def some_function
nil
end
Cela est fondamentalement utile lorsque vous ignorez les exceptions à l'aide d'une simple instruction d'une ligne:
Process.kill('CONT', pid) rescue nil
Au lieu d'utiliser un bloc:
begin
Process.kill('CONT')
rescue
end
Et la suppression de nil
entraînerait une erreur de syntaxe:
> throw :x rescue
SyntaxError: (irb):19: syntax error, unexpected end-of-input
from /usr/bin/irb:11:in `<main>'
Remarques:
def some_function; end; some_function
renvoie nil
.
def a; :b; begin; throw :x; rescue; end; end; a;
renvoie également nil
.
fonctions et classes sur une seule ligne
def name ; end
class Name ; end
fonctionne très bien pour pseudocode.
Comme répondu avant tout dans Ruby est un expression donc c'est bien de le laisser vide.
def name
end
class Name
end
A Ruby alternative pour python programmeurs 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 autorise les méthodes vides, mais si vous aimez vraiment pass
, c'est l'alternative la plus simple et la plus propre.
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 pass est une fonction qui revient, c'est donc à vous de voir comment vous pouvez l'utiliser.
Si vous voulez pouvoir l'utiliser librement avec n'importe quel nombre d'arguments, vous devez avoir une petite astuce 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
.
En 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.
Prenons l'exemple suivant (dans 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 Ruby documentation NilClass pour référence.
Je crois que pass
de Python est principalement utilisé pour surmonter les limitations syntaxiques du langage (indentation), bien que je ne sois pas très expérimenté en Python.