私はScala言語が初めてです。scala Longの範囲
ロングタイプにはレンジが必要です。
ステップ1で[1、2、3 ... 10000000]のリストが必要です。/からtoまで使用すると、IntではなくLongを使用するため、エラーが発生します。
開始、終了、空のListを期待し、[start .. end]のListを生成する簡単な関数を書こうとします。私は次の行にOutOfMemory
エラーが出ますrange_l(1L, 1000000L, List())
:
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)
}
}
私は同じようにそれを呼び出す場合:add_to_list = start :: list
は何が私をアドバイスすることができます。ここ
は私の関数でありますか? Range[Long]
を入手するにはどうすればよいですか、または機能を最適化するにはどうすればよいですか。どうすればOutOfMemoryを避けることができますか?
ありがとうございます。
一般的に、範囲はマテリアライズする必要はありません。 REPL上で ''toto(Int.MaxValue)'を試して、結果の型を見てください。そのようなタイプについては、[Scalaのソースを見る](http://www.scala-lang.org/api/current/scala/collection/immutable/Range$$Inclusive.html)を自由に感じてください:) –
あなたは話しています'Range'については、あなたの関数は' List'を返します。これは、スカラーの型が異なっています。 'List [Long]'が必要な場合は 'List.range(0L、10)'とすることができます – 4e6
なぜこのような範囲が必要ですか?それを得るのはかなり簡単ですが(パラダイムの答えを参照してください)、それを使用することはしばしば実用的ではありません。あなたの問題に対するより良い解決策があるかもしれません。また、あなたのエラーは何ですか? '1〜10000000'はエラーになりません。 –