【发布时间】:2015-02-18 14:55:00
【问题描述】:
(经过编辑使问题更具体)
我想知道是否可以在另一个对象的上下文中执行单例方法,如下例所示:
class A
def initialize
@foo = 'foo'
end
end
def A.singleton(*args)
puts 'in singleton'
puts @foo
end
A.new.instance_eval &A.method(:singleton)
# output is:
# - in singleton
# desired output:
# - in singleton
# - foo
【问题讨论】:
-
你能证明你为什么要使用这种令人困惑的结构吗?我想不出为什么在模块上定义单例方法会导致在封闭模块中定义实例方法。如果我们知道用例,我们可能会向您展示一种更惯用的方法。
-
这是一个实验,纯粹的句法实验,作为对某些方法进行分组或添加额外功能的一种方式。我很欣赏一种更惯用的方法可能是使用诸如
special_method :baz之类的类方法,但我只是在探索另一种方法。一个可能的应用程序可能是以这种方式记忆一个方法,即def memoize.baz,但我同意这很混乱,可能不是我在实际项目中使用的东西。不过,我仍然想知道这是否可能。
标签: ruby metaprogramming singleton-methods