2015-01-26 2 views
-1

я пытался из рубинового коан и обнаружили, что этот код приводит к бесконечному циклу - был бы признателен некоторые указатели о том, почему зацикливание происходит:Почему этот рубин код, связанный с символами приводит к бесконечному циклу

def test_constants_become_symbols 
    all_symbols_as_strings = Symbol.all_symbols.map { |x| x.to_s } 

    assert_equal false, all_symbols_as_strings.include?(test_constants_become_symbols) 
end 

ответ

1

test_constants_become_symbols вызывает себя в последней строке. Состояние остановки не существует.

1

Вы рекурсивно называете функцию test_constants_become_symbols: assert_equal false, all_symbols_as_strings.include? (test_constants_become_symbols)

6

Это infinite recursion потому, что на этой линии:

assert_equal false, all_symbols_as_strings.include?(test_constants_become_symbols) 

Метод test_constants_become_symbols вызывается снова, который запускает эту линию снова, и так далее, пока стек не слишком глубоко.

+0

Большое спасибо - этого не осознавали! – vanval