3

我有两个问题:

  1. 方法是否f_1属于元类匿名类?
  2. 方法是否f_2属于匿名类?

与以下代码相关:

car = "car"

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

4 回答 4

4

由于 ruby​​ 自己的 API 使用术语“单例类”,我认为以下是正确的:

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

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

    car.f_2
    
于 2011-06-16T18:59:12.987 回答
2

好吧,术语很脆弱,但是FWIW我想说你的班级并不是真正的匿名班级。至于归属,这两种方法都只存在于汽车对象中。

老实说,当针对这样的单个对象定义类时,我对类方法和实例方法之间的区别有点模糊——我猜如果有任何区别,它会变得晦涩难懂,会让你的代码更难阅读;)

更新:如果您以前没有看过它,您可能会发现这很有帮助。(就个人而言,这让我很头疼,但每个人都不一样......)

于 2011-06-16T18:40:09.953 回答
0

罗布戴维斯回答的重新表述:

  1. 的方法所有者:f_1car.singleton_class.singleton_class
  2. 的方法所有者:f_2car.singleton_class

carcar.singleton_classcar.singleton_class.singleton_class对应于http://www.atalon.cz/rb-om/ruby-object-model/#sc-inheritance-sample图表中的底行。

笔记:

于 2011-07-27T08:20:54.110 回答
0

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

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

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

于 2011-06-17T00:05:20.667 回答