我在红宝石中使用元编程,我有一个问题.我有一节课:
class Klass
class << self
@x = "yeah"
end
end
b = Klass.new
a = class << Klass; self; end
a.instance_eval "@x" #=> yeah
Klass.instance_eval "@x" #=> nil
Run Code Online (Sandbox Code Playgroud)
为什么?在变量中a我有一个单例类,对吗?并且Klass.instance_eval在单例类的上下文中执行:
Klass.instance_eval "def yeah; puts 10; end"
Klass.yeah #=> 10
Run Code Online (Sandbox Code Playgroud)
另外,Klass在翻译中指出课程的背景,是吗?并a指出单例类的上下文?哪个表明a.class_eval和a.instance_eval?我做:
a.instance_eval "def pops; puts 0; end"
a.class_eval "def popsx; puts 1; end"
a.pops #=> 0
a.popsx # FAIL
Klass.pops # FAIL
Klass.popsx #=> 1
b.pops; b.popsx # DOUBLE …Run Code Online (Sandbox Code Playgroud) 家伙.我创建了一个类:
class A
def initialize &b
instance_eval &b
end
def method_missing method_id, *args
self.define_method(method_id) { puts args.first }
end
end
b = A.new { new_method "oops" }
Run Code Online (Sandbox Code Playgroud)
但是不起作用
SystemStackError: stack level too deep
Run Code Online (Sandbox Code Playgroud)
为什么?