以下是一个例子:
if is_important
if votes < 500
votes = 3000
else
votes = votes * 10
end
else
if votes < 500
votes = 8000
else
votes = votes * 5
end
end
我正在尝试找到在Ruby中以更清晰的方式编写此类嵌套if
/ else
条件的最佳方法。
答案 0 :(得分:3)
对我来说,“更清洁的方式”是一个简单的界面,这并没有迫使我深入了解实现细节(但是当我不得不这样做时,应该很容易阅读):
def count(votes)
is_important ? count_important(votes) : count_not_important(votes)
end
private
def count_important(votes)
votes < 500 ? 3000 : votes * 10
end
def count_not_important(votes)
votes < 500 ? 8000 : votes * 5
end
P.S。通过这个简单的任务,if/else
语句就足够了。
答案 1 :(得分:2)
votes =
if is_important
(votes < 500) ? 3000 : votes * 10
else
(votes < 500) ? 8000 : votes * 5
end
在ruby if-else中,case语句在计算表达式后返回值。
答案 2 :(得分:1)
您可以随时展平您的筑巢。此外,不要忘记检查实际上是否有投票,因为你有一些假设存在的回报。
votes = 0 unless votes
votes = if is_important && votes < 500
3000
elsif is_important
votes * 10
elsif votes < 500
8000
else
votes * 5
end
你也可以使用if和get
votes = 0 unless votes
votes = if is_important && votes < 500 then 3000
elsif is_important then votes * 10
elsif votes < 500 then 8000
else votes * 5
end
答案 3 :(得分:1)
有很多方法可以做到这一点。这是一个干燥和紧凑,但可能太奇怪的一个:
votes =
case [is_important, votes < 500]
when [true, true] then 3000
when [true, false] then votes * 10
when [false, true] then 5000
when [false, false] then votes * 5
end