É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
38
demandé sur user1251007 2012-11-19 15:14:51

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.

48
répondu Jörg W Mittag 2012-11-19 11:37:07

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

Exemple Ruby:

def some_function()
    # do nothing
end
10
répondu user1251007 2012-11-21 13:25:32

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.

10
répondu konsolebox 2017-05-09 04:37:26

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.

9
répondu Fady Faried 2017-02-15 14:27:19

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, &pr; end
0
répondu sawa 2012-11-19 16:53:23

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.

0
répondu gkats 2017-02-15 14:40:34