我是新來的Scala語言。scala範圍長
我需要範圍爲長類型。
我需要步驟1的[1,2,3 ... 10000000]的列表。如果我使用直到/因爲使用Long而不是Int得到錯誤。
我嘗試編寫一個簡單的函數,它需要一個開始,結束和一個空列表並生成[start .. end]列表。
這裏是我的功能:
def range_l(start : Long, end : Long, list : List[Long]) : List[Long] = {
if (start == end){
val add_to_list = start :: list
return add_to_list
}
else {
val add_to_list = start :: list
range_l(start + 1, end, add_to_list)
}
}
如果我這樣稱呼它:range_l(1L, 1000000L, List())
我在下面的行獲得OutOfMemory
錯誤:add_to_list = start :: list
你能指點我?我如何獲得Range[Long]
或如何優化功能。我如何避免OutOfMemory?
謝謝。
範圍一般不需要實現。在REPL上嘗試'1.to(Int.MaxValue)'並查看結果類型。請隨時[查看Scala源代碼](http://www.scala-lang.org/api/current/scala/collection/immutable/Range$$Inclusive.html)查找此類型:) – 2012-05-09 07:00:03
您正在談論關於'Range',但是你的函數返回'List',它是scala中的不同類型。如果你想'List [Long]',你可以'List.range(0L,10)' – 4e6
爲什麼你需要這樣一個範圍?獲得一個很容易(見範式的答案),但使用它往往是不切實際的。您的問題可能會有更好的解決方案。另外,你的錯誤是什麼? '1到10000000'不會給出錯誤。 –