Forum: Italian Ruby user group Chiarimento su controllo dell'accesso ai metodi ...

Posted by Ivan M. (kiosirio)
on 2010-06-11 12:55
Ciao.
Per favore mi potete confermare che le seguenti cose che ho capito sul
controllo dell'accesso ai metodi siano vere:

1 - Se non dichiarato altrimenti ogni metodo creato è pubblico;
2 - Quando definisco un metodo di fatto lo definisco publico, è in un
secondo momento che informo Ruby che il metodo è privato o protetto
tramite le seguenti istruzioni: private :nome_metodo o protected
:nome_metodo (:nome_metodo è il simbolo/etichetta relativa al metodo).

Ho capito bene?
Ciao e grazie.
KioSirio
Posted by Luca Guidi (Guest)
on 2010-06-11 13:05
(Received via mailing list)
Puoi anche fare così 

class MyClass
  def a
  end

  protected
  def b
  end

   private
   def c
   end
end

Tutti i metodi definiti dopo la keyword 'protected' sono protetti, lo 
stesso
accade per 'private'.

Luca
Posted by Walter Valenti (waltervalenti)
on 2010-06-11 15:34
(Received via mailing list)
class MyClass
  def a

> end

  protected
  def b
  end


> private
   def c
   end
end

Tutti i metodi definiti
> dopo la keyword 'protected' sono protetti, lo stesso
accade per
> 'private'.



Tra l'altro, che differenza c'è tra "private" e "protected" ?


Walter
Posted by Luca Guidi (Guest)
on 2010-06-11 15:48
(Received via mailing list)
http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Classes

Luca
Posted by Luca Ongaro (lucaongaro)
on 2010-07-12 22:04
> 
> Tra l'altro, che differenza c'� tra "private" e "protected" ?
> 


I metodi protected possono essere chiamati da altre istanze dello stesso 
oggetto.

Esempio:

class MyClass
  def uguale?(other)
    self.a == other.a
  end

  def uguale_due?(other)
    self.b == other.b
  end

  protected

  def a
    ...
  end

  private

  def b
    ...
  end
end

foo1 = MyClass.new
foo2 = MyClass.new

foo1.uguale? foo2 # true o false

foo1.uguale_due? foo2 # errore! foo1 non può chiamare un metodo private 
di foo2!
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.