<?xml version='1.0' encoding='UTF-8'?>
<elementos_gw>
  <documento>
    <id>972</id>
    <autor>5</autor>
    <nome>Trying to understand metaclasses</nome>
    <nome_facil>trying to understand metaclasses</nome_facil>
    <criacao>2011-03-23 00:12:24</criacao>
    <alteracao>2011-03-23 00:18:43</alteracao>
    <texto>{{{
class A
  def self.aa
    puts &#039;a&#039;
  end
  class &lt;&lt; self
    def ab
      puts &#039;b&#039;
    end
  end
end

def mets(x); puts x.methods.select{|m| m=~/^a.$/}.sort.join(&#039;, &#039;); end
def imets(x); puts x.instance_methods.select{|m| m=~/^a.$/}.sort.join(&#039;, &#039;); end

a = A.new

def A.ac
  puts &#039;c&#039;
end

class A
  def self.ad
    puts &#039;d&#039;
  end
end

class &lt;&lt; a
  def self.ae
    puts &#039;e&#039;
  end
end

class &lt;&lt; A
  def af
    puts &#039;f&#039;
  end
end

mets A
mets a.eigenclass
imets a.metaclass
imets A.eigenclass
imets a.eigenclass.eigenclass
}}}

Conclusion: Class methods defined in A are not A methods; they&#039;re A eigenclass methods (= A instance metaclass methods).

Instance methods defined in A are A methods or A instance eigenclass methods? =&gt; Answer: A methods.</texto>
    <publico>1</publico>
    <original>0</original>
    <anterior>0</anterior>
    <versao>0</versao>
    <traducao>0</traducao>
    <propriedade>
      <nome>language</nome>
      <valor>Ruby</valor>
      <publico>1</publico>
    </propriedade>
    <propriedade>
      <nome>language</nome>
      <valor>English</valor>
      <publico>1</publico>
    </propriedade>
  </documento>
</elementos_gw>
