What is the difference between ruby ​​send and ruby ​​public_send method?

I am very curious to know what is the difference between send and public_send . For instance:.

 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" 

Can someone explain the difference?

+17
source share
1 answer

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

Unlike send, public_send only calls public methods.

Example:

 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) 
+28
source

Source: https://habr.com/ru/post/987763/


All Articles