2016-07-27 10 views
0

と一緒に文の連鎖それは本当に簡単な質問だ、と私は良い説明を見つけることができませんでした。セミコロンを使ったステートメントの連鎖が可能であることはわかっていますが、コンマを使っていくつかのコードが見つかりました。例:はコンマ

def gcd(a, b) 
    a, b = b, a%b until b.zero? 
    a 
end 

この方法では、2つの数値の間の最大の商の約数を計算します。私はこの計算の背後にある論理を理解していますが、誰かがこのsintaxでどのように起こっているのか教えてください。それは実際に文をチェーンいない

答えて

4

、それはパラレル割り当てます。それは意味:abの値を割り当て、同時にでba%bの値を割り当てます。

値は相互に依存しているので、それは単にのように記述することはできません。配列を構造化代入するときと同じ構文にも便利です

# Correct, but more verbose and less readable 
old_b = b 
b = a%b 
a = old_b 

# WRONG 
a = b 
b = a%b 

あなたは一時変数を必要とするだろうたとえば、

my_array = [1,2,3] 
a, b, c = my_array 
+2

...および*平行割り当て*(時々*複数の割り当て*と呼ばれる)*の曖昧性除去と組み合わせることができる*: 'my_arrayで= [1,2、[3,4]。 a、b、(c、d)= my_array; a#=> 1; b#=> 2; c#=> 3; d#=> 4 'となる。 –

+1

並列割当てを使用して、メソッドから複数の値を返すこともできます。 – BrunoFacca

0

これはガード句の例です。

基本的には、ガード句は、条件に基づいて実行されるからRubyコードのブロックまたはラインを有効または防止する条件文です。

def mymethod 
    return error unless somecondition 
    calculation 
end 

すなわちガード句がトリガされた場合、エラーを返し、そうでない場合は、デフォルトを実行します。

fn mymethod do 
    if somecondition 
     return calculation 
    else 
     return error 
    end 
end 

Rubyはあなたが上記のように再構築することができます:次のように

ほとんどの言語は、パラダイムを持っています計算の動作。あなたのケースでは

、ガード条件は、ループの代わりに、単一の条件です。