2015-05-22 10 views
6

Sono molto curioso di sapere qual è la differenza tra send e public_send. Es .:Qual è la differenza tra il metodo rubino send e ruby ​​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" 

Qualcuno può spiegare la differenza?

+1

cosa significa quello che @Casper, rendere il vostro 'metodo hello' privato e riprovare. – Mischa

+0

Capisci @Mischa ....... grazie mille. –

risposta

10

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

A differenza di invio, public_send chiamate solo metodi pubblici.

Esempio:

class Klass 
    private 
    def m 
    puts "Hello" 
    end 
end 

k = Klass.new 
k.send(:m) 
=> "Hello" 
k.public_send(:m) 
=> `public_send': private method `m' called for #<Klass:0x007f5fd7159a80> (NoMethodError) 
Problemi correlati