ruby 使用method_missing扩展Fixnum以更自然的方式处理某些时间约定。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 使用method_missing扩展Fixnum以更自然的方式处理某些时间约定。相关的知识,希望对你有一定的参考价值。
# This combines the examples given here http://pastebin.com/zxsur5MX
# and here http://pastebin.com/agjb5qBF
# Note: Time.now returns current time as seconds since epoch
module TimeConventions
TIME_CONVENTIONS = {
'second' => 1,
'minute' => 60,
'hour' => 60 * 60,
}
def method_missing(method_id, *args, &block)
singular_convention = method_id.to_s.gsub(/s$/, '')
if TIME_CONVENTIONS.has_key? singular_convention
self * TIME_CONVENTIONS[singular_convention]
else
super
end
end
def ago ; Time.now - self ; end
def from_now ; Time.now + self ; end
end
class Fixnum
include TimeConventions
end
puts Time.now
# => Mon Nov 07 10:18:10 -0800 2011
puts 1.minute.ago
# => Mon Nov 07 10:17:10 -0800 2011
puts 5.minutes - 4.minutes
# => 60
puts 1.hour.from_now
# => Mon Nov 07 11:18:15 -0800 2011
puts 3.hours.from_now
# => Mon Nov 07 13:18:15 -0800 2011
以上是关于ruby 使用method_missing扩展Fixnum以更自然的方式处理某些时间约定。的主要内容,如果未能解决你的问题,请参考以下文章
Ruby 中的 method_missing 陷阱
ruby 使用define_method和method_missing
Ruby BasicObject方法
Ruby BasicObject 方法
Ruby:define_method 与 def
dynamic_matchers.rb:55:in `method_missing':ActiveRecord::Base:Class 的未定义方法 `migration_error=' (NoMet