2

「アジャイルWeb開発とレール」という本のチュートリアルをたどっていますが、次のコードが見つかりました。

def User.encrypt_password(password, salt) 
  Digest::SHA2.hexdigest(password + "wibble" + salt)
end

Digestソースコード(digest.rbおよびrubyインストールdigest/sha2.rbのディレクトリ内)を調べると、メソッドが定義されlibている場所が見つからないようですが、コードは正常に機能しているようです。hexdigest

誰かがこれがどのように起こるかを私に教えてもらえますか?どういうわけか次のようなコードを探す必要があると思います。

def hexdigest(...)
   ...
end
4

2 に答える 2

8

パーツ、および他のhexdigestいくつかの同様のメソッドは、速度のC拡張として記述されています。これext/digest/はRubyソースにあります。

static VALUE rb_digest_instance_hexdigest(int argc, VALUE *argv, VALUE self)ext/digest/digest.c私のRuby1.9.2-p0ソースの216行目で定義されています。他の多くの関数を呼び出すだけですが、少なくとも出発点になる可能性があります。

SHA2の場合、ext/digest/sha2/sha2.cこれらの機能を含む別のものがあります。digest.cただの基本であり、他のものによって「拡張」されています

于 2011-01-13T22:25:12.803 に答える
1

http://ruby-doc.org/stdlib/libdoc/digest/rdoc/classes/Digest/Class.htmlによると

ダイジェストは、digest.rbおよびdigest.c(ネイティブメソッド)に実装されています。ここで起こっているのは、hexdigestがDigest::SHA2が継承するDigestのクラスメソッドであると私は信じています。hexdigestの実装は、各ダイジェストタイプが実装するダイジェストクラスメソッドを呼び出し、結果を返します。

于 2011-01-13T22:28:12.667 に答える