更新:更好的答案与重构无关,但与设置空键的默认值有关。看到第一个答案 - 非常感谢!
大家好,你会如何重构这个?
if n=network_stats["b"]
network_stats["b"] = n +1
else
network_stats["b"]=1
end
我有一种唠叨的感觉,这可以用两行完成
答案 0 :(得分:5)
这是一个简短易读的oneliner:
network_stats["b"] = (network_stats["b"] || 0) + 1
更长但可能更具可读性和可扩展性(将来会添加更多案例)版本:
network_stats["b"] = case network_stats["b"]
when nil then 0
else network_stats["b"] + 1
end
更新: 作为一种好奇心,这可以解决:
network_stats["b"] += 1 rescue network_stats["b"] = 1
我不会亲自使用它。
答案 1 :(得分:4)
# do this when network_stats is defined
network_stats.default= 0
# to increment the network stats
network_stats["b"] += 1
例如
>> (network_stats={}).default= 0
=> 0
>> network_stats["b"] += 1
=> 1
>> network_stats
=> {"b"=>1}
答案 2 :(得分:3)
network_stats [“b”] =(n == network_stats [“b”]?(n + 1):1)
希望这会有所帮助
欢呼声
sameera
PS:这是一个很好的代码重构网站
答案 3 :(得分:3)
如果为nil,您可以使用|| =运算符来赋值:例如:
network_stats["b"] ||= 1
然后你确定network_stats["b"]
的值有如此简单的增量1:
network_stats["b"] += 1
最终代码:
network_stats["b"] ||= 1
network_stats["b"] += 1
答案 4 :(得分:0)
network_stats["b"] = (n == network_stats["b"])? n+1 : 1
答案 5 :(得分:0)
我将假设您的代码中存在轻微的错误,并且您打算在第一行进行比较而不是分配,如下所示:
if n == network_stats["b"]
network_stats["b"] = n + 1
else
network_stats["b"] = 1
end
我会将其重构为:
n == network_stats["b"] ? (network_stats["b"] = n + 1) : (network_stats["b"] = 1)
虽然基督徒的答案在使用的字节数方面更精确,但我发现它的可读性较差,但这只是个人意见。
如果他删除了答案,那就是:
network_stats["b"] = (n == network_stats["b"]) ? n + 1 : 1
答案 6 :(得分:0)
嘿明你应该知道三元运算符
我认为这可能会帮助你解决问题
network_stats [“b”] =(n == network_stats [“b”])? n + 1:1
答案 7 :(得分:0)
(network_stats ||= Hash.new(0))["b"] += 1