如何在ruby方法中定义单例方法?

时间:2015-12-07 16:42:13

标签: ruby-on-rails-4.1 ruby-2.1

在ruby 1.9中,可以做到这一点:

def foo
  val = "a string"
  def val.big
    self.upcase
  end
  val
end

并且可以调用foo,返回“string”,或者返回foo.big并返回“A STRING”。

然而,在Ruby 2.1中不再可能,抛出了“无法定义单例方法”的错误。如何在2.1中为foo和foo.big实现这些方法?

(显然这是一个简化的例子,我需要做的是对另一个方法返回的值实现一个单例方法)。

更新:看来这可能在ruby 2.1中,但不是在ActiveRecord类的上下文中!

SECOND UPDATE:当val是一个字符串时,这确实有效。当我试图在像这样的数字上定义单例类时,我的问题浮出水面:

def foo
  val = 42
  def val.smaller
     self - 11
  end
  val
end

这会引发错误“TypeError:无法定义单例”

0 个答案:

没有答案