如何改进这些代码

时间:2016-02-13 17:38:25

标签: ruby

我正在寻找一种方法来避免两次声明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

4 个答案:

答案 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。