2

class_evalinstance_evalメソッドの定義などの場合は、非常に予測可能です。また、クラスのインスタンスとクラスのシングルトン (別名固有クラス) の違いも理解しています。

しかし

次のような唯一のことを理解できません。たとえば、いくつかのストレージの目的で、既存のクラスをシングルトンにしたいとします。

class A; end
class B; end

A.class_eval do
  private :new
end

B.instance_eval do
  private :new
end

どちらの場合も得た

NameError: undefined method 'new' for class
Did you mean?  new

はい、私はまさにこの方法を意味します。

selfさらに、これら 2 つのバリアントは、どちらの場合もクラス オブジェクトのポイントのように、同じ結果をもたらします。

A.class_eval do
  class << self
    private :new
  end
end

A.new
=> NoMethodError: private method 'new' called for A:Class

B.instance_eval do
  class << self
    private :new
  end
end

B.new
=> NoMethodError: private method 'new' called for B:Class

どうして?誰でもこれに光を当てることができますか?

4

1 に答える 1