我们可以缩短以下Ruby代码,同时更具可读性吗?
height = do_some_calc
height = 128 if height == 0
答案 0 :(得分:7)
height = 128 if 0 == height = do_some_calc
这是我所知道的唯一方法,如果do_some_calc
必须只评估一次。
答案 1 :(得分:2)
如果你愿意改变do_some_calc
以返回false或nil而不是0,那么你就是在做生意。
height = do_some_calc || 128
如果你不能改变do_some_calc以返回false或nil,它通常会返回0,那么你可以包装它,但是从长远来看你不会保存很多字符。除了您有许多地方设置默认值的情况。
如果do_some_calc返回0,则此包装器将返回false,而在所有其他情况下,此包装器将返回do_some_calc的输出。
def my_do_some_calc
temp = do_some_calc
temp != 0 && temp
end
全部放在一起给出了:
height = my_do_some_calc || 128
答案 2 :(得分:1)
更短的?没有功能。
height = (h = do_some_calc).zero? ? 128 : h
如:
def do_some_calc
rand 100
end
10.times do
height = (h = do_some_calc).zero? ? 128 : h
puts height
end
# >> 3
# >> 95
# >> 89
# >> 82
# >> 31
# >> 4
# >> 82
# >> 99
# >> 11
# >> 64
答案 3 :(得分:0)
可能有以下几点:
STANDARD_HEIGHT = 128
def do_some_calc
height = 0
#calculate our height...
height = height == 0 ? STANDARD_HEIGHT : calculated_height
end
我认为需要为128
提供更多上下文,因此常量。我还认为do_some_calc
应该隐藏这样一个事实:如果它确实等于0,那么它应该等于我们的DEFAULT_HEIGHT
。
编辑:要回答您的隐含问题(我编辑过的问题),我们可以通过延长do_some_calc
来缩短问题。
答案 4 :(得分:0)
您可以执行以下操作
height = do_some_calc.zero? ? 128 : do_some_calc
答案 5 :(得分:-4)
如果不是非常易读,这在技术上会更短:
(height = do_some_call) == 0 and height = 128
我会说保持它的方式,你的方式似乎是最简洁和可读的。