我刚开始是这么写的
def average(list) list.sum / list.length end
不过,当传入的 list 长度为 0 的时候就出错了,于是代码就改成:
def average(list) if list.length > 0 list.sum / list.length else 0 end end
倒是可以工作了,不过代码看起来还丑的样子 大家有什么解决办法么?
刚刚看到一个写法:
def average(list) list.blank? and 0 or list.sum / list.length end
你这样不是挺好的吗,不过我喜欢这样写
return 0 if list.size == 0 list.sum / list.size
清晰明白
#2 楼 @fresh_fish 那个写法倒是可以工作,不过代码 2 个地方用了 list.length 并且来了一个 if else 感觉坏味道很明显呀
def average(list) list.sum / list.length rescue 0 end
我现在暂时这么写了……
在 rails 里面可以
list.tap {|i| return (i.inject(&:+).try(:/, i.size)) }
@wuwx 不用这么纠结吧,主要代码能清晰易懂,我还是赞成你原来的写法
#5 楼 @diudiutang 返回值还是原数组啊?
#4 楼 @wuwx 你这个如果 sum 是浮点数的话,rescue 不起作用的
#8 楼 @fresh_fish 如果 sum 能有数值的话,说明 list.length 就不能为 0 啦
#7 楼 @wuwx 嗯,意思是你可以用 try 处理空数组,加个 return 就可以了
@wuwx 你的 rescue 这个版本就挺好的;不过最好要保证 list 是一个 array 吧
list.sum / [1, list.length].max
@diudiutang 看着蛋都碎了