Come faccio a distinguere tra elementi appartenenti alla libreria standard, gemme specifiche e quelli generati dall'utente in Ruby?

2

Sono un programmatore principiante, che per vari motivi sta utilizzando una base di codici Ruby esistente per imparare a programmare. Il mio obiettivo è essere in grado di comprendere ed eventualmente estendere questo codice base. Tuttavia, trovo difficile capire cos'è una funzione di libreria standard , una funzione gemma o una funzione creata dall'utente . Distinguere tra le funzioni potrebbe non essere l'unica cosa che devo fare, potrebbero esserci anche altri "oggetti" che si muovono. La ragione della domanda è che voglio essere in grado di leggere il codice e, mentre passo, identificare quale documentazione devo leggere per capire il codice.

Quindi, la mia domanda è: in codice Ruby, come faccio a distinguere tra elementi appartenenti alla libreria standard, gemme specifiche e quelli che sono generati dall'utente, in modo che possa cercare nel posto giusto per capire quali funzioni identificate (e altre cose)?

    
posta histelheim 22.05.2013 - 16:24
fonte

1 risposta

2

Pry è estremamente utile per identificare da dove provengono i metodi.

    [4] pry(#<ProductsController>)> show-doc respond_to

    From: /usr/local/var/rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/actionpack-3.2.13/lib/action_controller/metal/mi
    Owner: ActionController::MimeResponds
    Visibility: public
    Signature: respond_to(*mimes, &block)
    Number of lines: 126

    Without web-service support, an action which collects the data for displaying a list of people
    might look something like this:

      def index
        @people = Person.all
      end
    ...

Ti mostrerà anche il codice sorgente per un metodo (e persino ti consente di modificarlo!):

    [5] pry(#<ProductsController>)> show-method respond_to

    From: /usr/local/var/rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/actionpack-3.2.13/lib/action_controller/metal/mime_responds.rb @ line 191:
    Owner: ActionController::MimeResponds
    Visibility: public
    Number of lines: 8

    def respond_to(*mimes, &block)
      raise ArgumentError, "respond_to takes either types or a block, never both" if mimes.any? && block_given?

      if collector = retrieve_collector_from_mimes(mimes, &block)
        response = collector.response
        response ? response.call : default_render({})
      end
    end
    
risposta data 23.05.2013 - 16:55
fonte

Leggi altre domande sui tag