基于gem我尝试使用键列表创建一个模块到我的rails应用程序 - 值:
module CodeMeaning
def name_of_code
CODES { "100" : "Continue",
"101" : "Switching Protocols",
"102" : "Processing",
"200" : "OK",
"201" : "Created
}
end
end
完成此模块并获取参数值的最佳方法是什么,例如:
CodeMeaning.get_code(101.to_s) - 回应"切换协议"
我创造了这样的东西,但它不起作用,我不确定什么是最好的练习&像这样的模块的结构:
def self.name_of_code code
CODE[code]
end
谢谢!
答案 0 :(得分:1)
module CodeMeaning
CODES = {
100 => "Continue",
101 => "Switching Protocols",
102 => "Processing",
200 => "OK",
201 => "Created"
}.freeze
def name_of_code code
CODES[code]
end
module_function :name_of_code
end
CodeMeaning.name_of_code(100) #=> "Continue"
我认为如果您尝试直接在模块上调用方法
,这可能会有效编辑:在有问题的评论之后。
为什么使用.freeze和
不确定。我使用.freeze
,因为使常量不可变是很好的礼节(但是,请注意,如果是字符串(整数不是),对象本身是可变的,所以要小心)。
什么" module_function:name_of_code"装置
在大多数情况下,模块包含在类中或扩展到类中。因此,您通常无法直接访问模块中的方法,除非通过它们包含或扩展到的类。但是,因为ruby是为开发人员编写的,所以很好,并且如果在代码中有意义,可以灵活地执行某些操作,直接在模块上调用方法,声明您打算直接在模块上调用它module_function
。