ruby send和ruby public_send方法有什么区别?

我很想知道sendpublic_send之间的区别。 例如:

 class Klass def hello(*args) "Hello " + args.join(' ') end end k = Klass.new k.send :hello, "gentle", "readers" #=> "Hello gentle readers" k.public_send :hello, "gentle", "readers" #=> "Hello gentle readers" 

有人可以解释一下这个区别吗?

http://apidock.com/ruby/Object/public_send

与send不同,public_send仅调用公共方法。

例:

 class Klass private def private_method puts "Hello" end end k = Klass.new k.send(:private_method) => "Hello" k.public_send(:private_method) => `public_send': private method `private_method' called for # (NoMethodError)