模块内的访问对象属性
我有一个属性.weekday
保存为整数值的类。
我正在尝试在模块中创建一个方法,将该数值转换为相应的工作日。
这就是我喜欢的工作方式:
MyClass.weekday => 2 MyClass.weekday.my_module_method => "Tuesday"
是否可以使用模块方法进行此转换,或者我在这里想错了?
我可以通过self
从模块mehtod中访问该对象,但我似乎无法做self.weekday
。
你想要做的当然是可能的。 当您将ActiveRecord :: Inflector指向类似的方式时,您是正确的。 这种方法修改了Fixnum
类本身以添加新方法,虽然我一般不建议对核心类进行临时修补,但您可以在active_support/core_ext/integer/inflections.rb
看到它的实际应用:
require 'active_support/inflector' class Integer # Ordinalize turns a number into an ordinal string used to denote the # position in an ordered sequence such as 1st, 2nd, 3rd, 4th. # # 1.ordinalize # => "1st" # 2.ordinalize # => "2nd" # 1002.ordinalize # => "1002nd" # 1003.ordinalize # => "1003rd" # -11.ordinalize # => "-11th" # -1001.ordinalize # => "-1001st" # def ordinalize ActiveSupport::Inflector.ordinalize(self) end end
在你的情况下,我可能会这样做:
module WeekdayInflector def weekday Date::DAYNAMES[self] end end class Fixnum include WeekdayInflector end
这将至少帮助其他人通过查看模块来追踪您添加的方法。 请注意,这将影响Fixnum的所有实例,如果您包含尝试执行相同操作的Gem,则可能会导致冲突。 值得一提的是,这种权衡是否值得,或者如果定义一个简单的视图助手是更好的方法。