我正在编写一个例程,将一个字符串与一个对象列表进行比较,每个对象可以是另一个字符串或一个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
提前致谢...
答案 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