在Ruby中扩展Date类

时间:2014-03-18 09:31:36

标签: ruby-on-rails ruby gem expand

我添加了这个方法

def self.addsub(days)
    if date.year==(date+days).year
        date=date+days
    else
        date=date-354+days
    end
  return date
  end

对Date类的扩展,大部分看起来像这样:

class Date
  include Holidays

  # Get holidays on the current date.
  #
  # Returns an array of hashes or nil. See Holidays#between for options
  # and the output format.
  #
  #   Date.civil('2008-01-01').holidays(:ca_)
  #   => [{:name => 'New Year\'s Day',...}]
  #
  # Also available via Holidays#on.

  def holidays(*options)
    Holidays.on(self, options)
  end

我尝试展开holidays-gem,但是当我尝试运行我的方法时,我总是这样做。

C:\...\Projekt 05.03.14\Timo\Testscripts>ruby jtt.rb
jtt.rb:5:in `<main>': undefined method `addsub' for #<Date: -4712-01-01 ((0j,0s,
0n),+0s,2299161j)> (NoMethodError)

有谁知道如何解决这个问题? 如果你想看到整个文件:

您可以在github ...

找到它

编辑:

感谢Slicedpan ......他告诉我解决方案:

class Date
  def addsub(days)
    if self.year == (self + days).year
      self + days
    else
      self - 354 + days
    end
  end
end

2 个答案:

答案 0 :(得分:0)

您需要从方法定义中删除self以生成实例方法。同样在该方法中,您可以使用self

来引用您正在调用它的实例
class Date
  def addsub(days)
    if self.year == (self + days).year
      self + days
    else
      self - 354 + days
    end
  end
end

答案 1 :(得分:0)

您的错误建议您在日期实例上调用addsub方法,但是您在类上定义它(def self.<name>是类方法)。相反,尝试:

def addsub(days)
  date = if self.year == (date + days).year
    date + days
  else
    date - 354 + days
  end
  date
end