是否有更简洁的方式编写此代码

时间:2014-06-05 18:23:12

标签: ruby

我刚刚编写了这个ruby代码,它非常简单,我只想交换依赖于变量的操作顺序。我觉得我写的东西比它需要的更冗长,有人能想到更简洁的写作方式吗?

if opts["--appears"]
  if regex = opts["--matches"]
    test = !response.text.match(regex)
  else
    test = !response.empty?
  end
else
  if regex = opts["--matches"]
    test = response.text.match(regex)
  else
    test = response.empty?
  end
end

所以我认为可以优化的是外部if块,所有更改都将test转换为!test。为似乎是一个简单的问题道歉,但我无法想到如何优化它。

如果您认为这个问题不是一个糟糕的论坛,或者您认为应该将其转移到代码审核中,请告诉我们。我认为这可能是最好的地方,但不确定。

由于

2 个答案:

答案 0 :(得分:2)

一个简单的改进是首先运行你的测试,然后如果选择[" - 出现"]则返回负数:

test = if regex = opts["--matches"]
  response.text.match(regex)
else
  response.empty?
end

opts["--appears"] ? !test : test

答案 1 :(得分:0)

我相信这会简化代码并提高可读性:

regex = opts["--matches"]
test =
  if opts["--appears"]
    regex ? !response.text.match(regex) : !response.empty?
  else
    regex ? response.text.match(regex)  : response.empty?
  end

或者,如果您愿意:

regex = opts["--matches"]
test =
  case opts["--appears"]
  when true
    regex ? !response.text.match(regex) : !response.empty?
  when false
    regex ? response.text.match(regex)  : response.empty?
  end