2012-11-19 5 views
30

In Python gibt es ein pass Schlüsselwort zum Definieren einer leeren Funktion, Bedingung, Schleife, ... Gibt es etwas ähnliches für Ruby?Äquivalent von "pass" in Ruby

Python Beispiel:

def some_function(): 
    # do nothing 
    pass 

Antwort

9

Sie haben immer end Aussagen, so wird pass nicht benötigt.

Ruby-Beispiel:

def some_function() 
    # do nothing 
end 
42

Nein, es gibt nicht so etwas in Ruby. Wenn Sie einen leeren Block wollen, Verfahren, Modul, Klasse usw., schreiben Sie einfach einen leeren Block:

def some_method 
end 

Das ist es.

In Python, jeder Block ist erforderlich mindestens eine Aussage darüber zu enthalten, das ist, warum Sie eine "fake" brauchen no-op-Anweisung. Ruby hat keine haben Anweisungen, es hat nur Ausdrücke, und es ist völlig legal für einen Block, null Ausdrücke zu enthalten.

0

Wenn Sie in der Lage sein wollen, dass es mit einer beliebigen Anzahl von Argumenten frei zu nutzen, müssen Sie sich auf die Argumente einen kleinen Trick haben:

def gobble *args, ≺ end 
8

Einzeiliger Funktionen und Klassen

def name ; end 

class Name ; end 

funktioniert gut für pseudocode.

Wie beantwortet, bevor alles in Ruby ist ein Ausdruck so ist es in Ordnung es leer zu verlassen.

def name 
end 

class Name 
end 

Rubin Alternative für Python-Programmierer, die den Pass Stichwort Liebe

def pass 
end 

# OR 

def pass; end 

Beachten Sie, dass es sinnlos ist, diese in Ruby zu tun, da es leer Methoden erlaubt, aber wenn Sie sind so scharf auf pass, dies ist die einfachste und sauberste Alternative.

und jetzt können Sie diese Funktion in jedem Block verwenden und es wird die gleiche Arbeit.

def name 
    pass 
end 

# OR 

class Name 
    pass 
end 

Denken Sie daran, dass Pass eine Funktion ist, die zurückkehrt, also liegt es an Ihnen, wie Sie es verwenden können.

4

nil ist wahrscheinlich das Äquivalent davon:

def some_function 
    nil 
end 

Eine Möglichkeit, dass es im Grunde hilfreich ist, wenn Rettung etwas, aber nichts dagegen zu tun:

Process.kill('CONT', pid) rescue nil 

Statt

begin 
    Process.kill('CONT') 
rescue 
end 
tun

Und dies würde Syntaxfehler verursachen:

> throw :x rescue 
SyntaxError: (irb):19: syntax error, unexpected end-of-input 
     from /usr/bin/irb:11:in `<main>' 

Hinweise:

def some_function; end; some_function würde noch Rückkehrnil.

def a; :b; begin; throw :x; rescue; end; end; a; würde auch noch nil zurückgeben.

+0

Dies ist die Lösung. Gute Arbeit. Ich suchte nach einem? : Weg, nichts zu tun: 'x == wahr? y = false: # Nichts tun, wenn "falsch" zu "x == wahr" wurde? y = false: nil' was perfekt funktioniert! – DeeJayh

+1

Gibt es einen Grund, warum du nicht einfach 'y = false wenn x' machen kannst? – pixatlazaki

0

Wie andere bereits gesagt haben, können Sie in Ruby einfach einen Methodenkörper leer lassen. Dies könnte jedoch etwas anders sein als das, was Python mit pass erreicht.

In Ruby ist alles ein Objekt. Die Abwesenheit von Wert, die einige Programmiersprachen mit null oder nil anzeigen, ist eigentlich ein Objekt von in Ruby.

Betrachten Sie das folgende Beispiel (in 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 

Hier ist Rubys NilClass documentation Referenz.

Ich glaube, Python pass wird hauptsächlich verwendet, um die syntaktischen Einschränkungen der Sprache (Einrückung) zu überwinden, obwohl ich nicht so in Python erfahren bin.