我正在寻找一种方法来避免两次声明return_with_nok
但仍然可以捕获这两种情况。有没有办法编写这个代码比当前代码更简洁?
def receive_notification(params)
if some_condition
case params[:case]
when 'case2'
... logic...
when 'case2'
... logic...
end
else
return_with_nok
end
else
return_with_nok
end
end
答案 0 :(得分:0)
这是你想要做的吗?
def receive_notification(params)
return 'c' unless params.is_a?(Hash)
case params[:case]
when 'case1'
'a'
when 'case2'
'b'
else
'c'
end
end
修改强>
您的新示例似乎仍然有一个end
逻辑不属于那里,在任何情况下我都希望使用一个条件的保护子句重构它如下。
def receive_notification(params)
return return_with_nok unless some_condition
case params[:case]
when 'case2'
..logic..
when 'case2'
..logic..
else
return_with_nok
end
end
答案 1 :(得分:0)
有一种方法可以做到这一点,这可能最终比你原始的原始代码更难看:
controller.set("_upload", function() {
const promise = new Ember.RSVP.Promise(function(resolve) {
resolve({name: "image1"});
});
promise.then(() => Ember.run.next(() => {
assert.equal(controller.get("selected.item"), "item");
}));
return promise;
});
controller.send("save", "item");
如果您可以将这些条件组合成一个单数值,那么您可以使用case some_condition && params[:case]
when ...
else
# ...
end
语句来执行此操作。对于那些不熟悉case
评估方式的人来说,这可能有点难以理解。
我主张采用最不容易混淆的选择,即使是以一点点冗长为代价。
解决这个问题的另一种方法是提前解决问题,将逻辑推平一个层次:
&&
你有一个重复的函数调用可能是你的逻辑结构的问题。这真的取决于。
答案 2 :(得分:0)
您是否会在case
中添加明确的回报并依赖于堕落而感到满意?
def receive_notification(params)
if some_condition
case params[:case]
when 'case1'
... logic...
return something1
when 'case2'
... logic...
return something2
end
end
return_with_nok
end
答案 3 :(得分:0)
有点奇怪,但你可以这样做:
params[:case] = 'else' unless some_condition
或者像这样,所以你不要改变用户参数:
kase = some_condition ? params[:case] : 'else'
case kase
#...
如果条件不匹配,那么你最终会进入else。