也许是一个简单的问题,但我们正在讨论是否更好地使用这个片段:
if %w(production staging).include?(Rails.env)
与
if ["production","staging"].include?(Rails.env)
我们只想了解哪种方法性能最佳,忽略了Ruby的sytax。从我在网络上可以看到,%w文字似乎是提供的空白字符串上string.split的简写。
但哪一个实际上最快?
p.s:感谢答案的来源。
答案 0 :(得分:7)
以下是%w
和%W
直接从parse.y
获取的内容(包含提示):
case '%':
[snip]
switch (c) {
[snip]
case 'W':
lex_strterm = NEW_STRTERM(str_dword, term, paren);
do {c = nextc();} while (ISSPACE(c));
pushback(c);
return tWORDS_BEG;
case 'w':
lex_strterm = NEW_STRTERM(str_sword, term, paren);
do {c = nextc();} while (ISSPACE(c));
pushback(c);
return tQWORDS_BEG;
考虑到它是在解析器级别实现的,我不会过分担心性能。
答案 1 :(得分:3)
我在c2d上做了一些测试:
ruby -e "10000000.times { ['one', 'two'].include?('two')}"
8.04s user 0.05s system 90% cpu 8.912 total
ruby -e "10000000.times { %w(one two).include?('two')}"
8.03s user 0.05s system 93% cpu 8.608 total