2

おそらく簡単な質問ですが、このスニッパーを使用する方がよいかどうかについて話し合っています。

if %w(production staging).include?(Rails.env)

if ["production","staging"].include?(Rails.env)

Rubyからのsytaxの提案を無視して、どちらが最もパフォーマンスの高い方法であるかを理解したいだけです。私がWebでできることから、%wリテラルは、提供された空白文字列のstring.splitの省略形のようです。

しかし、実際に最も速いのはどれですか?

ps:答えの出典をいただければ幸いです。

4

2 に答える 2

7

(省略して)から直接取得したもの%wと実行方法は次のとおりです。%Wparse.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;

パーサーレベルで実装されていることを考えると、パフォーマンスについてはあまり心配しません。

于 2012-06-25T09:57:27.837 に答える
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
于 2012-06-25T09:49:38.047 に答える