使用class
关键字时,在该类中进行常量查找。在下文中,分配给:bar
的内容为B::A
,而不是::A
。
A = :foo
class B
A = :bar
end
A # => :foo
但是在方法定义中,我无法使用关键字class
,如果我使用class_eval
,module_eval
,instance_eval
等内容来评估一个块,那么所提到的常数将在主要环境中评估如下。
class B; end
def foo &pr
B.class_eval(&pr)
end
foo{A = :bar}
A # => :bar
有没有办法将块传递给方法并在某个类/模块中对其常量进行求值?
答案 0 :(得分:0)
我想我知道你在问什么(虽然我还不明白你为什么需要)。您可以将该类返回到块中,因此至少您明确了解正在发生的事情:
def foo &pr
yield self.class
end
my_object.foo {|klass| klass::A = :bar }
答案 1 :(得分:0)
Module#const_set似乎就是你想要的:
class B; end
def foo(klass, konstant, val)
klass.const_set(konstant, val)
end
foo(B, "A", :bar)
B::A #=> :bar
A #=> NameError: uninitialized constant A
...但由于你没有提及,我希望我误解了这个问题。