具有与参数匹配的列表的模块

时间:2016-06-24 16:51:34

标签: ruby-on-rails

基于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

谢谢!

1 个答案:

答案 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