Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby——获取定义类名_Ruby - Fatal编程技术网

Ruby——获取定义类名

Ruby——获取定义类名,ruby,Ruby,如何获得在中定义了方法的类 我发现了如何查找后代和鸟类: 但这并不一定能让我真正了解定义类的最后一个定义类 我已经找到了如何获得调用类: 但我想要相反的结果。我想知道如何获得定义类 我还尝试了Module.nesting。在这种情况下,这就得到了我想要的东西,但我担心它会不一致,在我无法最终控制的更大的代码库中是不可接受的 puts RUBY_VERSION # Test class vs super. class Super def test_func puts &q

如何获得在中定义了方法的类

我发现了如何查找后代和鸟类:

但这并不一定能让我真正了解定义类的最后一个定义类

我已经找到了如何获得调用类:

但我想要相反的结果。我想知道如何获得定义类

我还尝试了Module.nesting。在这种情况下,这就得到了我想要的东西,但我担心它会不一致,在我无法最终控制的更大的代码库中是不可接受的

puts RUBY_VERSION


# Test class vs super.
class Super
    def test_func
      puts "#{self.class}, #{ __method__}"
    end
end

class Child < Super
  def test_func2
     self.test_func
  end
end

Child.new.test_func
我曾希望:

1.8.7

超级,测试函数

但是得到:

1.8.7

子测试函数

您询问了子对象的self.class,得到了它

您需要使用返回定义该方法的类或模块

class Super
  def test_func
    puts "#{method(__method__).owner}, #{ __method__}"
  end
end

class Child < Super
  def test_func2
     self.test_func
  end
end

Child.new.test_func
# will print: Super, test_func
您询问了子对象的self.class,得到了它

您需要使用返回定义该方法的类或模块

class Super
  def test_func
    puts "#{method(__method__).owner}, #{ __method__}"
  end
end

class Child < Super
  def test_func2
     self.test_func
  end
end

Child.new.test_func
# will print: Super, test_func

Ruby 1.8.7非常陈旧,非常过时,因此如果你有任何升级的方法,这将对Ruby有很大帮助,因为从那以后Ruby上发生了很多新的事情,最关键的是,包括适当的UTF-8支持。不太有趣的是,对于这个特定的项目,我坚持使用1.8.7。更糟糕的是,我不能使用宝石/这听起来像是乐趣的反面。希望你能活下来!Ruby 1.8.7非常陈旧,非常过时,因此如果你有任何升级的方法,这将对Ruby有很大帮助,因为从那以后Ruby上发生了很多新的事情,最关键的是,包括适当的UTF-8支持。不太有趣的是,对于这个特定的项目,我坚持使用1.8.7。更糟糕的是,我不能使用宝石/这听起来像是乐趣的反面。希望你能活下来!这太棒了!它在1.8.7中工作。非常感谢。我用它来添加一个日志行,而不是手动键入类和方法。我已经对你的答案投了赞成票。我找不到在哪里把它标记为已接受。也许这是因为我的名声微乎其微?考虑到test_func必须是Child.new,为什么不选择UnboundMethodowner呢?jayreed1,您需要以编程方式定义它的类,还是仅仅为了查看它,以便进行调试,比如说。如果是后者,请查看…method:some_method的返回值,您将看到它就在那里,您不必附加.owner…例如,22.method:zero?=>,显示Integerzero?是用数值定义的,而22.method:+=>告诉我们Integer+是用Integer定义的,因为它被解释为.Or Child.instance\u method:test\u func.owner,所以您不必创建实例。这太棒了!它在1.8.7中工作。非常感谢。我用它来添加一个日志行,而不是手动键入类和方法。我已经对你的答案投了赞成票。我找不到在哪里把它标记为已接受。也许这是因为我的名声微乎其微?考虑到test_func必须是Child.new,为什么不选择UnboundMethodowner呢?jayreed1,您需要以编程方式定义它的类,还是仅仅为了查看它,以便进行调试,比如说。如果是后者,请查看…method:some_method的返回值,您将看到它就在那里,您不必附加.owner…例如,22.method:zero?=>,显示Integerzero?是用Numeric定义的,而22.method:+=>告诉我们Integer+是用Integer定义的,因为Integer被解释为.Or Child.instance\u method:test\u func.owner,所以您不必创建实例。