重构 还是一个基础问题。 有没有一个漂亮的写法实现这段代码?

afghl · September 01, 2015 · Last by jimrokliu replied at September 01, 2015 · 7202 hits
if preg < 0
    return 0
elsif preg > max_right
    max_right
else
    preg
end

简单的实现最大值最小值的方法。有点代码洁癖。谢谢大家。

想不出其它方法 我也就只能写到一行了

preg < 0 ? 0 : (preg > max_right ? max_right : preg)
return 0 if preg < 0
preg > max_rigth ? max_right : reg

如果最后一个返回值是 preg, 那么可以这样写

return 0 if preg < 0

[max_right, preg].min

如果最后一个返回值是 reg, 现在的写法就挺好的

你的问题和代码有点让人迷惑

[[preg, max_right].min, 0].max

其实 LZ 的方法是最好的。一眼就能读懂。虽然比那些花哨的 one-liner 多了几行。但是我觉得值。

网上还有个更恶心的玩法,[min, p, max].sort[1]

#8 楼 @huacnlee 一直这么写,感觉更方便阅读

谢谢大家。觉得 huacn 的写法比较好 也容易懂。

直接按需求读出来就可以写出来了,取 preg 和 0 中大的一个,然后取和 max_right 中小的一个:

[[preg, 0].max, max_right].min

#11 楼 @quakewang 会创建多余的对象

return 0 if preg < 0

if preg > max_right
    max_right 
else
  reg
end

太少的代码行数不容易理解。

You need to Sign in before reply, if you don't have an account, please Sign up first.