2015-06-19 2 views
1

Следующий код вешает Отв:Выход для контура как только условие удовлетворено

(
    for { 
    i <- 1 to 1000000 
    j <- 2 to 1000000 
    if i * i == j 
    } yield i -> j 
).take(1) 

Кажется, для выражения жадно оценивали. Любые решения?

+0

Это может ответить на ваш вопрос: http://stackoverflow.com/questions/2742719/how-do-i-break-out-of -a-loop-in-scala –

ответ

1

Я бы превратить это в поток:

(
    for { 
     i <- Stream.range(1, 1000000) 
     j <- Stream.range(2, 1000000) 
     if i * i == j 
    } yield i -> j 
).take(1) 
+0

сделать это 'Stream.range (1,10000000)', и вы избежите создания гигантского экземпляра '' Range '' (от 1 до 1000000). – Chirlo

+0

Чирло, хорошо спасибо :) – bjfletcher

Смежные вопросы