Вы правы, это обычный способ метапрограммирования, с помощью которого легко делается аналог Class::Accessor.<div><br></div><div>Как вы видите, любое замыкание может стать методом любого класса/объекта. И выполнено как на стадии определения, так и на стадии выполнения (определение - это выполнение, где self указывает на сам класс).<br>
<div><br></div><div>Правда, методы attr_accessor, attr_reader, attr_writer и т.д. уже определены в базовом Module (<a href="http://ruby-doc.org/core/classes/Module.html#M001681">http://ruby-doc.org/core/classes/Module.html#M001681</a>)</div>
<div><br></div><div>Проблема Perl - он требует хаков для метапрограммирования.</div><div><br><div class="gmail_quote">30 апреля 2010 г. 19:13 пользователь Andrei <span dir="ltr">&lt;<a href="mailto:andrei.protasovitski@gmail.com">andrei.protasovitski@gmail.com</a>&gt;</span> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br><br><div class="gmail_quote">30 апреля 2010 г. 17:01 пользователь Akzhan Abdulin <span dir="ltr">&lt;<a href="mailto:akzhan.abdulin@gmail.com" target="_blank">akzhan.abdulin@gmail.com</a>&gt;</span> написал:<div class="im">
<br><blockquote class="gmail_quote" style="border-left:1px solid rgb(204, 204, 204);margin:0pt 0pt 0pt 0.8ex;padding-left:1ex">
<div>Здесь я определяю метод класса, который ниже в определении же класса вызываю, и он создаёт пару методов экземпляра.</div><div><br></div>class Something<div>  def self.reporter(*names)</div><div>    names.each do |name|</div>


<div>      define_method(name) do</div><div>        puts &quot;You have called #{name}&quot;</div><div>      end</div><div>    end</div><div>  end</div><div><br></div><div>  reporter :ametist, :rubinius</div><div>end<br>

<br>
</div><div>obj = Something.new</div><div>obj.ametist</div><div>obj.rubinius</div><div><br clear="all"></div></blockquote></div></div><br>Почти так же круто, как Class::Accessor. :-P<br><font color="#888888"><br>-- <br>Andrei Protasovitski<br>
&lt; andrei[dot]protasovitski[at]gmail[dot]com &gt;<br>
Diemen, Netherlands<br>
</font><br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br></div></div>