函数没有 return,很奇怪

function doesn't return, very weird

我有一个获取元素数组的函数,然后它遍历该数组,当找到预期的元素时它会中断并 return。

函数是这样的:

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>

我无法理解为什么调用的函数没有 return?

离开 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 方法似乎不错。