Ruby中的匿名类

时间:2011-06-16 18:16:47

标签: ruby eigenclass

我有两个问题:

  1. 方法f_1是否属于元类匿名类?
  2. 方法f_2是否属于匿名类?
  3. 与以下代码相关:

    car = "car"
    
    class << car
      def self.f_1
        puts "f_1"
      end
      def f_2
        puts "f_2"
      end
    end
    

4 个答案:

答案 0 :(得分:4)

由于ruby自己的API使用术语“singleton class”,我会说以下是真的:

  1. f_1是汽车单身类的一个类方法,可以像这样调用:

    car.singleton_class.f_1
    
  2. f_2是car的单例类的实例方法,可以像这样调用:

    car.f_2
    

答案 1 :(得分:1)

嗯,术语是易碎的,但是我想说你的班级不是一个真正的匿名班级。至于归属,这两种方法都只存在于汽车对象中。

我会诚实地承认,当对照像这样的单个对象定义类时,我对类方法和实例方法之间的区别有点模糊 - 我猜想如果有任何区别的话,这将是一个模糊的,将使您的代码更难阅读;)

更新:如果您以前没见过,可能会发现this有帮助。 (就个人而言,它会让我头痛,但每个人都不同......)

答案 2 :(得分:0)

我的印象是匿名类是一个没有名字的类:

my_class = Class.new
my_class.name # => nil

但是,Pickaxe将其称为未命名的类而不是匿名类。

答案 3 :(得分:0)

Rob Davis回答的重新制定:

  1. :f_1的方法所有者是car.singleton_class.singleton_class
  2. :f_2的方法所有者是car.singleton_class
  3. carcar.singleton_classcar.singleton_class.singleton_class对应于http://www.atalon.cz/rb-om/ruby-object-model/#sc-inheritance-sample图表中的底行。

    注意: