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

afghl · 2015年09月01日 · 最后由 jimrokliu 回复于 2015年09月01日 · 7207 次阅读
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

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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号