2016-09-06 4 views
1

Ich habe eine Funktion, die ein Array von Element erhält, dann iteriert es über das Array, wenn das erwartete Element gefunden wird, bricht es und kehrt zurück.Funktion kehrt nicht zurück, sehr seltsam

Die Funktion ist folgende:

def get_expected_element(id:, name:) 
    # I am sure there are 3 elements got 
    elem_array = get_all_elements(id) 

    element = nil 
    elem_array.each { |elem| 
    # I see this log 
    puts "elem = #{elem}" 

    if elem == name 
     element = elem 
     # I see this log too 
     puts "Found element" 
     break 
    end 
    } 
    # I see this log too, and program is hanging 
    puts "=== return ===" 
    element 
end 

Wenn ich die Funktion aufrufen, das Programm hängt nach puts "=== return ===":

service = MyService.new 
element_got = service.get_expected_element(id:3, name:"apple") 

# I don't see the below log 
puts "#{element_got}, I don't see this, why?" 

Die Log-in-Konsole ist dies:

elem = orange 
elem = apple 
Found element 
=== return === 

<it is hanging> 

Ich kann nicht verstehen, warum die aufgerufene Funktion nicht zurückkehrt.

+0

Haben Sie eine explizite Rückgabeanweisung versucht? (d. h. Rückgabeelement) Ich verstehe nicht, warum das einen Unterschied macht, aber es ist zunächst einfach zu versuchen. – dean

+0

Ja, versucht, das gleiche Problem –

Antwort

1

Weglassen MyService lief ich dies:

def get_expected_element(id:, name:) 
    # I am sure there are 3 elements got 
    # elem_array = get_all_elements(id) 
    elem_array = ["elem1", "apple", "elem3"] 

    element = nil 
    elem_array.each { |elem| 
    # I see this log 
    puts "elem = #{elem}" 

    if elem == name 
     element = elem 
     # I see this log too 
     puts "Found element" 
     break 
    end 
    } 
    # I see this log too, and program is hanging 
    puts "=== return ===" 
    element 
end 

puts get_expected_element(id: 3, name: "apple") 

und bekam dies:

elem = elem1 
elem = apple 
Found element 
=== return === 
apple 

Ihre get_expected_element Methode scheint in Ordnung.