Cum să returnați o anumită valoare dintr-o metodă?

Am acest cod care încearcă să returneze o valoare dintr-o metodă:

temp = "123"
return temp

și am această linie care apelează metoda și atribuie valoarea returnată:

person_connections = @client.get_person_connections(:id => current_user_id )

dar când încerc să inspectez person_connections , arată un șir diferit de obiect. V-ați gândit cum să reveniți la valoarea reală a variabilei temp?

  def get_person_connections(options = {})
    person_id = options[:id]
    path = "/people/id=" + person_id + ":(num-connections)" 
    query_connections(path, options)
    self
  end

și

private

def query_connections(path, options={})
  fields = options.delete(:fields) || LinkedIn.default_profile_fields

  if options.delete(:public)
    path +=":public"
  elsif fields
    path +=":(#{fields.map{ |f| f.to_s.gsub("_","-") }.join(',')})"
  end

  headers = options.delete(:headers) || {}

  params = options.map { |k,v| v.is_a?(Array)  ? v.map{|i| "#{k}=#{i}"}.join("&") : "#{k}=#{v}" }.join("&")

  path   += "?#{params}" if not params.empty?

  temp_var = get(path, headers)

  hash = JSON.parse(temp_var)
  conn = hash["numConnections"]
end
1
Doar editat întrebarea inițială :)
adăugat autor GeekedOut, sursa
Puteți afișa funcția get_person_connections ?
adăugat autor Makoto, sursa
adăugat autor the Tin Man, sursa
În primul rând, nu trebuie să utilizați return . În Ruby, ultima declarație va fi returnată. De asemenea, ar fi util să afli ce este un șir diferit de obiect .
adăugat autor Samy Dindane, sursa

1 răspunsuri

După cum a spus Samy într-un comentariu:

În Ruby, ultima instrucțiune va fi returnată.

Deci, dacă aruncăm o privire la get_person_connections , vedem că ultimul rând este self . Ce inseamna este ca returneaza instanta pe care a fost numita metoda, @client in acest caz.


Additional notes: the solution would be to remove self, although if the method is used elsewhere be careful as returning self is often used to allow chaining of methods (though it hardly makes sense to do that on a get method).

2
adăugat
așa că acum fac acest lucru: hash = JSON.parse (temp_var) conn = hash ["numConnections"] pune conn.inspect și afișează numărul. Dar pe funcția inițială, valoarea este încă obiectul. Deci, numărul nu este atribuit.
adăugat autor GeekedOut, sursa
Dacă doriți ca query_connections să returnați numărul de conexiuni, lăsați-l la fel ca în întrebarea dvs. Dacă doriți ca get_person_connections să returnați și numărul de conexiuni, eliminați ultima auto . Metodele sunt denumite astfel: @client. get_person_connections -> query_connections (astfel încât valoarea returnată a query_connections este trimisă la get_person_connections ) și valoarea returnată get_person_connections este atribuit codului person_connections
adăugat autor mbillard, sursa