我正在按照Agile Web Development with Rails一书中的教程进行操作,找到了以下代码:

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

但是,查看ruby安装中Digest目录中的digest.rb源代码(digest/sha2.rblib),我似乎找不到hexdigest方法的定义位置,但是代码似乎工作得很好。
有人能告诉我这是怎么回事吗?我想我需要找一个代码,看起来像:
def hexdigest(...)
   ...
end

最佳答案

hexdigest部分和其他一些类似的方法被编写为速度的C扩展它在Ruby源代码中的ext/digest/中找到。
static VALUE rb_digest_instance_hexdigest(int argc, VALUE *argv, VALUE self)在Ruby 1.9.2-p0源代码的ext/digest/digest.c中的第216行定义它只是调用一系列其他函数,但至少它可能是一个起点。
对于sha2,还有一个ext/digest/sha2/sha2.c包含这些函数。digest.c只是基础,“扩展”了

10-01 13:43