Podczas pracy nad "Scala dla zniecierpliwionych" zastanawiałem się: czy można użyć pętli Scala bez sekwencji?Dla pętli w scala bez sekwencji?
Na przykład w książce znajduje się ćwiczenie z prośbą o zbudowanie obiektu licznika, którego nie można zwiększyć o wartość Integer.MAX_VALUE. W celu przetestowania moje rozwiązanie, napisałem poniższy kod:
var c = new Counter
for(i <- 0 to Integer.MAX_VALUE) c.increment()
ten zgłasza błąd: sekwencje nie może zawierać więcej niż elementów Int.MaxValue. Wydaje mi się, że oznacza to, że Scala po raz pierwszy przydziela i wypełnia obiekt sekwencji, z wartościami od 0 do liczby całkowitej.MaxValue, a następnie wykonuje pętlę foreach na tym obiekcie sekwencji.
Zdaję sobie sprawę, że mogę to zrobić w zamian:
var c = new Counter
while(c.value < Integer.MAX_VALUE) c.increment()
Ale czy jest jakiś sposób aby zrobić tradycyjną stylu C do pętli z pętli for?
Wow, trudna odpowiedź, ale dobra. Po prostu uczę się Scali, więc używałeś wielu terminów, z których jestem zaledwie zaznajomiony, ale dzięki. –
Definicja 'fromTo' może być dodatkowo uproszczona za pomocą metody' iterate' na obiekcie towarzyszącym 'Stream' (lub' Iterator'). Coś w rodzaju: 'def fromTo (from: Int, to: Int) = Stream.iterate (from, to - from) (_ + 1)'. Ale używanie 'od do do' jest bardziej idiomatyczne i osiąga to samo. –