2016-10-07 5 views
0

で複数の変数を割り当てるためにcase文を使用して:私はルビーでHSV RGBの機能を実現しています、と私は、このような構文を期待していたルビー

def hsv_to_rgb(h, s, v) 
    if (h == 0) then return 0, 0, 0 end 
    c = v * s 
    hp = h/60.0 
    x = c * (1 - (hp % 2 - 1).abs) 
    r, g, b = case hp 
     when 0..1 
      c, x, 0 
     when 1..2 
      x, c, 0 
     when 2..3 
      0, c, x 
     when 3..4 
      0, x, c 
     when 4..5 
      x, 0, c 
     else 
      c, 0, x 
     end 

    m = v - c 
    return r + m, g + m, b + m 
end 

しかし、私はこの中を実行しようとすると、 Jruby次のエラーメッセージが表示されます。

SyntaxError: julia2.rb:60: syntax error, unexpected '\n' when 1..2

ruby​​には次の構文がありますか? ありがとう!

+0

いくつかの点があります:1) 'h == 0なら返り値0、0、0、' h.zeroなら '[0,0,0]を返します。 2) '(1 - (hp%2 - 1).abs)'は 'hp.even? ? 0:1 '; 3)「hp」が「0」または「1」である場合、「0..1」が「真」であるが、「when.1.2」は、「when 0..1」が'hp'が' 1'と同じときに実行されます(残りの 'when'と同じです)。 4)キーワード 'return'は、メソッドの最後の行にあるときは、通常は省略されます。 –

答えて

4

case文の戻り値は、rubyエンジンで受け付けられません。私はあなたが配列を返したいと思う...おそらく[]を使用して?このよう

def hsv_to_rgb(h, s, v) 
    if (h == 0) then return 0, 0, 0 end 
    c = v * s 
    hp = h/60.0 
    x = c * (1 - (hp % 2 - 1).abs) 
    r, g, b = case hp 
     when 0..1 
      [c, x, 0] 
     when 1..2 
      [x, c, 0] 
     when 2..3 
      [0, c, x] 
     when 3..4 
      [0, x, c] 
     when 4..5 
      [x, 0, c] 
     else 
      [c, 0, x] 
     end 

    m = v - c 
    return r + m, g + m, b + m 
end 
+0

これは機能します!ありがとう! – dustinroepsch

0

返す配列は動作しますし、それは同様に、より読みやすいです。

関連する問題