web-dev-qa-db-fra.com

Équivalent de «pass» dans Ruby

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
45
user1251007

Vous avez toujours des instructions end, donc pass n'est pas nécessaire.

Exemple Ruby:

def some_function()
    # do nothing
end
11
user1251007

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.

52
Jörg W Mittag

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.

16
konsolebox

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.

10
Fady Faried

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, &pr; end
0
sawa

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.

0
gkats