2016-09-06 13 views
1

私は、要素の配列を取得し、期待される要素が見つかったときにそれが折り返して返されると、配列を反復処理する関数を持っています。関数は返されません。非常に奇妙です。

機能はこれです:私は、関数を呼び出すと

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 

、プログラムは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?" 

コンソールでログはこれです:

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

<it is hanging> 

呼び出された関数が返されない理由を理解できませんか?

+0

明示的なreturn文を試しましたか? (すなわち、戻り要素)。私はなぜそれが違いを生むかもしれないが、最初は何かを試してみるのは簡単なことを理解していない。 – dean

+0

はい、試しました、同じ問題 –

答えて

1

たMyServiceを残して、私はこの走っ:

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") 

をし、これを得た:

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

あなたget_expected_element方法は罰金です。

関連する問題