在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:无法定义单例”