Hi, At Fri, 15 Oct 2004 00:53:37 +0900, Michael Neumann wrote in [ruby-talk:116637]: > Implementation: > > # file: digest/from_io.rb > class Digest::Base > def self.from_io(io, block_size=8*1024) > digest = new > while data = io.read(block_size) > digest.update(data) > end > digest > end > end Another implementation could be: def Digest::Base.from(src) digest = new src.each(&digest.method(:update)) digest end This requires #each method instead of #read, do you think which is better? > Another addition would be the raw_digest method (which of course could > be better implemented in C): > > require 'enumerator' > class Digest::Base > def raw_digest > hexdigest.to_enum(:scan, /../).map {|byte| byte.to_i(16).chr}.join > end > alias rawdigest raw_digest > end It is equivalent to Digest::Base#digest. -- Nobu Nakada