Sinatra 关于 Sinatra 源码里的一处疑问

aidewoode · 2015年12月27日 · 最后由 aidewoode 回复于 2015年12月31日 · 7509 次阅读

最近在看 sinatra 的源码,里面有一处的代码让我不清楚用意到底是什么。

代码是这样的

char =~ /[A-Z]/ ? "[#{char}#{char.tr('A-Z', 'a-z')}]" : char

https://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L1630

我的疑惑是其中 char.tr('A-Z', 'a-z') 的目的难道不是为了把 大写的字母转成小写的字母吗?如果是的话,为什么不直接用 downcase 呢? 或者是说这样写有其它的用处?还望指教。

是不是,如果是全大写,转成大写加小写?

@raofeng 已经提交了一个 PR,还在讨论中, https://github.com/sinatra/sinatra/pull/1059

@aidewoode 为什么改成 char =~ /[A-F]/ 了?

@darkbaby123 因为这段代码, patt.gsub(/%[\da-fA-F]{2}/) {...}

Have you ever tried the simplest way?

{ |ch| ch == ch.downcase ? ch : ch + ch.downcase } is almost 20% faster.

@msg7086 :plus1: 对,应该用你这种方法,简单明了,而且更快,看来我把事情搞复杂了。 😄

需要 登录 后方可回复, 如果你还没有账号请 注册新账号