るびきちです。

ブロックを丸投げしてクラスを定義するとprivateになるのは仕様ですか?
なぜそうなるのか挙動がいまいち理解できません。
最新版でも変わりません。

RUBY_VERSION                    # => "1.9.0"
RUBY_RELEASE_DATE               # => "2007-12-25"

klass = Class.new do
  attr_accessor :v
end
o = klass.new
o.v = 1
o.v                             # => 1

def defmeth(&block)
  Class.new(&block)
end

klass = defmeth do
  attr_accessor :v # !> private attribute?
end
o = klass.new
o.v = 1
o.v                             # => 
# ~> -:19:in `<main>': private method `v=' called for #<#<Class:0xb7b42924>:0xb7b42834> (NoMethodError)


VS


RUBY_VERSION                    # => "1.8.6"
RUBY_RELEASE_DATE               # => "2008-03-24"

klass = Class.new do
  attr_accessor :v
end
o = klass.new
o.v = 1
o.v                             # => 1

def defmeth(&block)
  Class.new(&block)
end

klass = defmeth do
  attr_accessor :v
end
o = klass.new
o.v = 1
o.v                             # => 1

--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/