В чем разница между методом ruby ​​send и ruby ​​public_send?

Мне очень любопытно узнать, какая разница между send и public_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"

Может кто-нибудь объяснить разницу?

Ответ 1

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 
    #<Klass:0x007f5fd7159a80> (NoMethodError)