Ruby eigenclass pattern - запрос на уточнение - PullRequest
2 голосов
/ 07 декабря 2010

Какие источники информации описывают лучшие собственные классы Руби?

Я прочитал следующее:

Тем не менее, я НЕ смог вывести следующее поведение:

class Object
  def sc(n = 1)  # nth superclass
    if n == 0 then return self end
    if n == 1 then return self.superclass end
    self.superclass ? self.superclass.sc(n-1) : nil
  end

  def ec(n = 1)  # nth eigenclass
    if n == 0 then return self end
    if n == 1 then return class << self; self; end end
    self.ec.ec(n-1)
  end

  def put_ups (m, n)  # print 0--nth superclasses of mth eigenclass

    puts "The first %d superclass ancestors-or-self of the %dth eigenclass of %s:" %
      [n, m, self.to_s]
    0.upto(n) {
      |i| puts "(%02d|%02d) %s" % [m, i, self.ec(m).sc(i).to_s]
    }
  end
end
class A; end

puts "RUBY_VERSION: %s" % RUBY_VERSION

A.new.put_ups(5,20)

выход

RUBY_VERSION: 1.9.2 The first 20 superclass ancestors-or-self of the 5th eigenclass of #<A:0xab7c50>: (05|00) #<Class:#<Class:#<Class:#<Class:#<Class:#<A:0xab7c50>>>>>> (05|01) #<Class:#<Class:#<Class:#<Class:A>>>> (05|02) #<Class:#<Class:#<Class:#<Class:Object>>>> (05|03) #<Class:#<Class:#<Class:#<Class:BasicObject>>>> (05|04) #<Class:#<Class:#<Class:Class>>> (05|05) #<Class:#<Class:#<Class:Module>>> (05|06) #<Class:#<Class:#<Class:Object>>> (05|07) #<Class:#<Class:#<Class:BasicObject>>> (05|08) #<Class:#<Class:Class>> (05|09) #<Class:#<Class:Module>> (05|10) #<Class:#<Class:Object>> (05|11) #<Class:#<Class:BasicObject>> (05|12) #<Class:Class> (05|13) #<Class:Module> (05|14) #<Class:Object> (05|15) #<Class:BasicObject> (05|16) Class (05|17) Module (05|18) Object (05|19) BasicObject (05|20)

1 Ответ

1 голос
/ 02 марта 2011

Подробная документация теперь доступна на http://www.atalon.cz/rb-om/ruby-object-model/

...