2016-04-14 13 views
2

Bir dizeden bir MD5 oluşturan basit bir gemim var.Ruby Mücevher bundle exec dışında çalıştırıldığında başlatılmamış sabit hata

module SimpleMD5 
    require 'digest/md5' 

    def self.md5_string(string) 
    Digest::MD5.hexdigest(string) 
    end 
end 

bundle exec bin/console Koşu ve yöntemini çağırarak çalışıyor

require 'simple_md5'

SimpleMD5.md5_string('test')

=> 098f6bcd4621d373cade4e832627b4f6

mücevher IRB konsol ve aynı kullanılarak rake build ve rake install kullanılarak inşa edildikten sonra Yukarıdaki örnekte g ve bir hata. taş yapılı olduğunda

NameError: uninitialized constant SimpleMD5::Digest

mıyım bir adım eksik?

SimpleMD5 adı otomatik oluşturulmaz
require 'digest/md5' 

module SimpleMD5 
    def md5_string(string) 
    Digest::MD5.hexdigest(string) 
    end 

    extend self 
end 

, bir yere ilan gerekir:

+0

'Moldule'? Lütfen detaylara daha fazla dikkat edin ve yardım etmeye çalışan insanlara daha saygılı olunuz, örneğin @tadman. – mudasobwa

cevap

1

Sen modülü tanımını kaçırıyorsun, bu nedenle bu desen kullanın.

extend self Burada, include SimpleMD5 modülünü karıştırmanın yanı sıra, örneğinizde olduğu gibi düz bir şekilde kullanabilirsiniz.

İki şeyi unutma: Ruby'de return üstü örtülüdür, işlevinizi erkenden uyguladığınız sürece kullanmanıza gerek yoktur ve MD5, 2016 için oldukça korkunç bir karma algoritmadır. geriye dönük uyumluluk, SHA256 veya SHA512 gibi daha iyi bir şey kullanın.

+0

'module_function',' kendini uzat 'yerine burada daha uygulanabilir. Kişisel olarak 'include' desenini kullanan herhangi bir kullanım vakası hayal edemiyorum. – mudasobwa

+0

@mudasobwa Ruby'de "mix-ins" kullanımı çok yaygındır, çünkü SimpleMD5'i içerir 'md5_string'i her zaman önek zorunda kalmadan kullanmanıza izin verir. – tadman

+0

'SimpleMD5' in de bunun için izin verildiğini söylendi. 'kendini uzat 'burada sadece ne SRY SRY takip etmez. – mudasobwa

İlgili konular