2016-09-01 3 views
1

ich mich Dinge wie diese machen oft finden:Gibt es eine „&& Equals“ Operator in Ruby

do_something if x && x == y 

In anderen Arbeiten, etwas tun, wenn x nicht gleich Null ist, und es hat einen Wert von y.

Es wäre schön, wenn ich so etwas tun könnte stattdessen:

do_something if x &&== y 

Gibt es einen Operator, der dies tut?


Antworten auf Kommentare:


x == y - Das Problem dabei ist, dass es Existenz nur Tests (nicht null), wenn der Wert von y bekannt ist. Wenn y selbst nil ist, schlägt die Prüfung fehl. So könnten Sie am Ende tun:

y && x == y 

x ||= y - Dies würde den Wert von y-x zuweisen, wenn x Null ist. Das ist nicht was ich suche. x &&= y funktioniert nicht aus dem gleichen Grund - es ändert den Wert x zu y, wenn x existiert.


Ein Beispiel: In meinem aktuellen Szenario möchte ich prüfen, ob ein Benutzer an eine Steuerung übergeben hat das Token mit ihnen verbunden sind, aber ich möchte auch, dass das Token, um sicherzustellen, zugewiesen wurde. Etwas wie:

do_something if user.token && user.token == params[:token] 
+0

wenn x einen Wert hat, bedeutet, dass es (x) existiert, so ist es nicht notwendig, denke ich. wegen der Notwendigkeit, gibt es keinen solchen Betreiber. – marmeladze

+1

Angenommen, dass 'y' einen Wert hat, könnten Sie einfach' 'schreiben, wenn x == y' – Stefan

+0

' x || = y' sollte funktionieren, nein? –

Antwort

3

Wenn Sie ruby>2.3.0 verwenden, können Sie den &. Operator verwenden: x&.== y. Es tut im Grunde, was .try in Rails tut, wenn der Wert des Operanden anders als nil ist, ruft er die Methode auf und gibt sein Ergebnis zurück. Wenn der Wert nil ist gibt es nil so können Sie Dinge wie: do_i_exist&.does_the_result_exist&.nil?

See: What does &. (ampersand dot) mean in Ruby?

+0

Danke @hakcho. Das sieht nach dem aus, wonach ich suche. 'x &. == y'. Weißt du, wo der Operator '& .' dokumentiert ist? Ich kann es nicht in Ruby-Docs finden – ReggieB

+1

@ReggieB [Calling Methoden] (http://ruby-doc.org/core-2.3.1/doc/syntax/calling_methods_rdoc.html#label-Receiver) enthält eine kurze Notiz : _ "Sie können" &. "Verwenden, um einen Empfänger zu bestimmen, dann wird" my_method "nicht aufgerufen und das Ergebnis ist" nil ", wenn der Empfänger" nil "ist. In diesem Fall werden die Argumente von' my_method' nicht ausgewertet . "_ – Stefan