From: matz@... (Yukihiro Matsumoto) Date: 2002-02-28T16:05:08+09:00 Subject: [ruby-list:34127] singleton class and anonymous class まつもと ゆきひろです えーと、 o1 = Class.new(Time).new o1.class.module_eval{ puts now } class << o1; puts now; end で後者がNameErrorになる理由がよくわからない、ということです が、それぞれのputsの場所でのselfがなんであるかを考えるとよい と思います。 前者ではselfはo1を生成した無名クラスです。最初の文を c1 = Class.new(Time) o1 = c1.new と分割したとすると、前者でのselfはc1と等しいです。 一方、後のputsでのselfはo1の特異クラスです。つまり、o1とだけ 関係を持つ仮想的なクラスです。このクラスはべつにTimeクラスと は直接関係がありませんので、Timeクラスの特異メソッドは使えま せん。