我有一个属性.weekday
的类保存为整数值。
我正在尝试在模块中创建一个方法,将该数值转换为相应的工作日。
这就是我喜欢的工作方式:
MyClass.weekday
=> 2
MyClass.weekday.my_module_method
=> "Tuesday"
是否可以使用模块方法进行此转换,或者我在这里想错了?
我可以通过self
从模块mehtod中访问该对象,但我似乎无法self.weekday
。
答案 0 :(得分:1)
你要做的事当然是可能的。当您将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,则可能会导致冲突。值得一提的是,这种权衡是否值得,或者如果定义一个简单的视图助手是更好的方法。