2011-11-07 4 views
2

Ruby on Railsのは、Rubyは、バージョン1.8.7以降、CなぜRailsはString#starts_withメソッドを実装していますか?エイリアスではなくstart_with?

static VALUE 
rb_str_start_with(int argc, VALUE *argv, VALUE str) 
{ 
    int i; 

    for (i=0; i<argc; i++) { 
     VALUE tmp = rb_check_string_type(argv[i]); 
     if (NIL_P(tmp)) continue; 
     rb_enc_check(str, tmp); 
     if (RSTRING_LEN(str) < RSTRING_LEN(tmp)) continue; 
     if (memcmp(RSTRING_PTR(str), RSTRING_PTR(tmp), RSTRING_LEN(tmp)) == 0) 
      return Qtrue; 
    } 
    return Qfalse; 
} 

理由で実装されている方法String#start_with?を有し、一方

# File lib/active_support/core_ext/string/starts_ends_with.rb, line 22 
def starts_with?(prefix) 
    prefix = prefix.to_s 
    self[0, prefix.length] == prefix 
end 

とRubyで実装されている方法String#starts_with?を有しますstarts_with?からにリンクされている別名はありませんか?

Ruby 1.8.6との互換性を維持したいのですか、またはがstarts_with?と異なる動作をしたり、コードを更新する必要がないと心配していますか?

答えて

4

あなたのコードから、本当に古いバージョンのRailsを手元に持っているようです(< = 2.3.5)。このバージョンは古いRubyバージョンをサポートしていましたが、まだを持っていませんでした。

しかし、ファイルの上を見れば、それらが利用可能である場合には、それらがruby組み込みメソッドを使用したことがわかります。 Ruby 1.8.6サポートが削除されたより新しいRailsバージョンでは、これらの魔法ビットwere removedとActiveSupportは無条件エイリアスを提供するようになりました。

+0

私はhttp://as.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/StartsEndsWith.htmlを見ていました。そのドキュメントは古いですか? –

+2

はい、http://as.rubyonrails.orgにアクセスしてください。2008年のものです。現在使用しているサイトはhttp://api.rubyonrails.org –

+1

です。ドキュメントは失敗します。古いサイトが古くなったと言うフレーム内のすべてのリクエストをラップするといいですか? – DGM

関連する問題