小编avy*_*avy的帖子

类对象,单例类

我在红宝石中使用元编程,我有一个问题.我有一节课:

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_evala.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)

ruby oop metaprogramming

10
推荐指数
1
解决办法
245
查看次数

instance_eval,define_method和method_missing

家伙.我创建了一个类:

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)

为什么?

ruby

2
推荐指数
1
解决办法
1370
查看次数

标签 统计

ruby ×2

metaprogramming ×1

oop ×1