Ruby:将字符串与另一个可能是字符串或正则表达式的对象进行匹配

时间:2015-05-31 08:08:36

标签: ruby regex string comparison

我正在编写一个例程,将一个字符串与一个对象列表进行比较,每个对象可以是另一个字符串或一个RegExp。是否有一种优雅的,以红宝石为中心的方式来处理这个问题?

现在,我正在做这样的事情:

def compare(str, thelist)
  thelist.any? do |item|
    case str
      when item then true
      else false
    end
  end
end

if compare("The String I am testing", ['I am not', /string/i])
  # got a match

这似乎运作得很好,但感觉有点过于苛刻,并且因为我的口味而啰嗦,所以我只是想知道是否有更好的方法来做到这一点。 (我对使用像instance_of这样的东西不感兴趣? - 我提出了这个解决方案,因为instance_of太难看了。)

使用Ruby 2.2.2

提前致谢...

2 个答案:

答案 0 :(得分:2)

这是您的方法的缩短版本:

public class ClientAuthAuthenticator {
    private CustomApplication customApplication;

    @Inject
    public PEMConverter pemConverter;
    @Inject
    public KeyPairCreator keyPairCreator;
    @Inject
    public PKCS10CsrCreator pkcs10CsrCreator;
    @Inject
    public KeyPairReader keyPairReader;
    //...

    public ClientAuthAuthenticator(CustomApplication customApplication) {
        this.customApplication = customApplication;
        SingletonBus.INSTANCE.getBus().register(this);
    }

    @Subscribe
    public void onInjectorInitializedEvent(CustomApplication.InjectorInitializedEvent e) {
        customApplication.getApplicationComponent().inject(this);
        SingletonBus.INSTANCE.getBus().unregister(this);
    }

    ...

答案 1 :(得分:1)

你可以简化:

def compare(str, thelist)
  thelist.any? { |item| item === str }
end