使用case语句在ruby中分配多个变量

时间:2016-10-07 02:55:05

标签: ruby

我正在ruby中实现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:语法错误,意外'\ n'                   当1..2

ruby​​中是否存在类似这种语法的内容? 谢谢!

2 个答案:

答案 0 :(得分:5)

ruby​​引擎不接受case语句中的返回值。我想你想返回一个数组......使用[]或许?

像这样:

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

答案 1 :(得分:0)

返回数组将起作用,它也更具可读性。