2016-07-10 4 views
-4

Ich weiß, dass ich so etwas wie dies für eine Variable tun können, die zwischen zwei Zuständen wechselt:eine variable Einstellung mit if/else

num = 0 
... 
if num == 0 
    num = 1 
else 
    num = 0 
end 

aber ist es eine Möglichkeit, dass ich es schön mehr tun können, vielleicht etwas wie folgt:

num = 1 if num == 0 else 0 

Ich weiß, dass das nicht stimmt, aber nur so etwas?

Dank (von einem Hintergrund Python hier kommt) !!

+0

Willkommen bei Stack Overflow. Du bekommst Downvotes, weil deine Frage keine Forschung oder Anstrengung zeigt. Dies ist oft auf Stack Overflow und im Internet abgedeckt. Bitte lesen Sie "[fragen]" einschließlich der verlinkten Seiten und http://meta.stackoverflow.com/q/261592/128421. –

Antwort

3

Sie können die ternären Operator verwenden:

num = num == 0 ? 1 : 0 

Das ausgewertet wird: kann

conditional ? return_this_if_true : return_this_if_false 
+0

Ich bin vertraut mit diesen, muss mir entfallen. Vielen Dank! –

3

Sie entweder einen ternären Operator verwenden:

num = num == 0 ? 1 : 0 

Oder Sie können ein verwenden plain alter if/else, der den Wert des ausgewerteten Blocks zurückgibt:

num = if num == 0 
     1 
     else 
     0 
     end 
1

ich hinzufügen sollte, sind, wenn Sie wirklich über eine Umschaltung zwischen 0 und 1 speziell, und keine zwei beliebige Zustände sprechen, können Sie nur num ^= 1 verwenden, die für num = num^1 syntaktischer Zucker ist, wo ^ ist eine binäre xoder Operator.

Zum Umschalten zwischen True und False können Sie natürlich val = !val verwenden.

Sonst, ja, der ternäre Operator ist das prägnanteste verfügbare Formular.

1
num = 1 - num 

ist eine andere Art und Weise ...

1

Nachdem zunächst ein Array arr Einstellung arr.rotate!.first

arr = [0,1] 
arr.rotate!.first #=> 1 
arr    #=> [1,0] 
arr.rotate!.first #=> 0 
arr    #=> [0,1] 

Alternaively cycle

arr = [0,1].cycle 
arr.next #=> 0 
arr.next #=> 1 

verwenden Oder vielleicht Verwendung eines machen verwenden könnte Enumerator (obwohl dies als ein bisschen vorbei betrachtet werden kann) Kill):

def alternator 
    Enumerator.new do |y| 
    arr = [0,1] 
    loop do  
     y << arr.rotate!.first 
    end  
    end 
end 

alt = alternator 
alt.next #=> 1 
alt.next #=> 0 
Verwandte Themen