我有一个简单的gem,可以从字符串创建MD5。
module SimpleMD5
require 'digest/md5'
def self.md5_string(string)
Digest::MD5.hexdigest(string)
end
end
运行bundle exec bin/console
并调用方法正常
require 'simple_md5'
SimpleMD5.md5_string('test')
=> 098f6bcd4621d373cade4e832627b4f6
使用IRB控制台和上面的相同示例使用rake build
和rake install
构建gem后,我收到错误消息。
NameError: uninitialized constant SimpleMD5::Digest
建造宝石时我错过了一步吗?
答案 0 :(得分:1)
您错过了模块定义,因此请使用以下模式:
require 'digest/md5'
module SimpleMD5
def md5_string(string)
Digest::MD5.hexdigest(string)
end
extend self
end
SimpleMD5
名称不会自动生成,您必须在某处声明。
此处extend self
表示您可以将模块与include SimpleMD5
混合使用,也可以像在示例中一样直接使用该模块。
不要忘记两件事:在Ruby中return
是隐含的,除非你提前退出函数,否则不需要使用它,而且MD5是2016年非常糟糕的哈希算法。除非你是使用它来向后兼容,使用更好的东西,如SHA256或SHA512。