o = Object.new
class << o
public :puts
end
o.puts "1. #{o.class.method_defined? :puts}" => false
o.puts "2. #{o.class.method_defined? :public_methods} => true
method_defined?まだ私に間違っていますか?プットをパブリックとして宣言したとしても、なぜですか?
o = Object.new
class << o
public :puts
end
o.puts "1. #{o.class.method_defined? :puts}" => false
o.puts "2. #{o.class.method_defined? :public_methods} => true
method_defined?まだ私に間違っていますか?プットをパブリックとして宣言したとしても、なぜですか?
o.class
=> Object
Object.method_defined? :puts
=> false
o.singleton_class
=> #<Class:#<Object:0x2b23858>>
o.singleton_class.method_defined? :puts
=> true
上記のコードは非常に明確な説明を示していると思います。オブジェクト自体を変更する場合は、元のクラスに追加したシングルトンメソッドが含まれていないためsingleton_class
ではなく、にアクセスするために使用する必要があります。class
名前付きメソッドがmod(またはそれに含まれるモジュール、およびmodがクラスの場合はその祖先)によって定義されている場合はtrueを返します
そして、このpublic
メソッドはアクセシビリティを設定するだけです。メソッド定義をオブジェクトのコンテキストに移動しません。