問題タブ [scala-collections]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 要素の種類によってコレクションをフィルタリングしてマッピングする組み込みのよりエレガントな方法はありますか?
たとえば、特定の型 (例: )Iterable[A]
のすべての要素を絞り込みたい場合は、次のようにします。String
ただし、これを を介して実行できるとして使用することが明らかに望ましいです。Iterable[String]
map
これはかなり醜いです。もちろん、flatMap
代わりに使用できます:
しかし、これがもっと読みやすいかどうかはわかりません! 変換narrow
を介して使用できる関数を作成しました。implicit
しかし、私が見落としていたより良い組み込みメカニズムがあるかどうか疑問に思っていました. List[A]
特に、私の関数のように aを aList[String]
ではなく、 aに狭められるとよいでしょうIterable[String]
。
scala - Scala 2.8 ブレークアウト
Scala 2.8では、次のオブジェクトがありますscala.collection.package.scala
。
これにより、次の結果が得られると言われています。
ここで何が起こっているのですか?my への引数としてbreakOut
呼び出されるのはなぜですか?List
scala - Scala2.8コレクションのデザインチュートリアル
私の息を呑むような混乱に続いて、新しいScala2.8 コレクションライブラリがどのように構成されているかを説明するいくつかの優れたリソースは何ですか。以下がどのように組み合わされるかについての情報を見つけたいと思います。
- コレクションクラス/特性自体(例
List
、Iterable
) - Likeクラスが存在する理由(例
TraversableLike
) - コンパニオンメソッドの目的(例
List.companion
) implicit
特定の時点でスコープ内にあるオブジェクトを知る方法
scala - Scala 2.8 コレクション ライブラリは「史上最長の遺書」のケースですか?
差し迫った2.8リリースで予定されているScala コレクション ライブラリの再実装を検討し始めたところです。2.7 からのライブラリに精通している人は、ライブラリが使用の観点からほとんど変わっていないことに気付くでしょう。例えば...
...どちらのバージョンでも動作します。このライブラリは非常に使いやすく、実際、素晴らしいものです。ただし、これまで Scala に慣れておらず、言語の感触をつかもうとしている人は、次のようなメソッド シグネチャを理解する必要があります。
このような単純な機能の場合、これは困難な署名であり、理解するのに苦労しています。Scala が次の Java (または /C/C++/C#) になる可能性があったとは思いません。その作成者がその市場を狙っていたとは思いませんが、Scala が Java になることは確かに実現可能であると思います。次の Ruby または Python (つまり、重要な商用ユーザー ベースを獲得するため)
- これは、人々が Scala に来るのを遠ざけるのでしょうか?
- これは、熱心な博士課程の学生だけが理解できるアカデミックな遊び道具として、商用の世界で Scala に悪い評判を与えることになるのでしょうか? CTOやソフトウェアの責任者は怖がるでしょうか?
- ライブラリの再設計は賢明なアイデアでしたか?
- Scala を商業的に使用している場合、これについて心配していますか? 2.8 をすぐに採用する予定ですか、それとも何が起こるかを待つ予定ですか?
Steve Yegge はかつて Scala を攻撃しました (私の意見では間違っていました)。誰かがこの API を使ってFUDを広めるフィールド デイを開催するのではないかと心配しています (Josh Blochが Java にクロージャを追加することからJCPを怖がらせたのと同様に)。
注-ジョシュア ブロッホが BGGA 閉鎖提案の却下に影響を与えたと私は信じていますが、これは提案が誤りであるという彼の正直な信念以外の何物でもないことを明確にしておく必要があります。
妻や同僚が何を言おうと、私は馬鹿だとは思いません: 私はオックスフォード大学で数学の学位を取得しており、ほぼ 12 年間商用プログラミングを行っており、Scalaで約 1年間プログラミングを行ってきました。年間(商業的にも)。
扇動的な件名は、1980 年代初頭の英国の政党のマニフェストについての引用であることに注意してください。この質問は主観的なものですが、本物の質問です。私はそれを CW にしました。この件について意見をお願いします。
arrays - 他のコレクションの代わりにScalaの配列を使用する必要があるのはいつですか?
これはスタイルと好みの問題ですが、ここに行きます:いつscala.Arrayを使うべきですか?私はいつもListを使用していて、SeqやMapなどに出くわすこともありますが、実際にArrayを使用したことも、見たこともありません。Javaとの互換性のためだけにありますか?一般的なユースケースがありませんか?
generics - TraversableLike ではなく GenericTraversableTemplate で flatten が宣言されるのはなぜですか?
の署名TraversableLike.flatMap
は次のとおりです。
の署名GenericTraversableTemplate.flatten
は次のとおりです。
後者の方法(変換flatMap
関数implicit
がTraversableLike
そうでなければならない何らかの理由がありますか?
scala - Scala TreeMap の奇妙さ; 逆順の実装
Map[Long, String]
キーの降順で繰り返し処理したい があります。これを行うために私が選んだ方法は次のとおりです。
なぜこれがうまくいかなかったのか理解できず、ばかげた間違いを犯したとしか思えません。もちろん、次のように動作します。
scala - ScalaのSortedMapsの和集合を形成するにはどうすればよいですか?
(私はScalaナイトリーを使用しており、2.8.0b1 RC4でも同じ動作が見られます。私はScalaの新参者です。)
SortedMap
結合したいものが2つあります。使用したいコードは次のとおりです。
ここでの考え方は、「暗黙の」ステートメントは、X
sをsに変換できることを意味し、マップだけでなく、sを別のにOrdered[X]
結合することは理にかなっています。SortedMap
SortedMap
コンパイルすると、
その型パラメータのバインドが。[A <% scala.math.Ordered[A]]
ではなく、である場合、私の問題はなくなるよう[A <: scala.math.Ordered[A]]
です。残念ながら、「注文した」メソッドがどこにあるのかさえわかりません。誰かが私がそれを追跡するのを手伝ってもらえますか?
それができない場合、2つのsの和集合を生成するために私は何をするつもりSortedMap
ですか?コンバインのリターンタイプを削除する(またはに変更するMap
)と、すべてが正常に機能します---しかし、リターンがソートされていることに依存することはできません!
scala - Scala での Streams のユースケース
Scala には、イテレーターによく似た Stream クラスがあります。トピックScala の Iterator と Stream の違いは? は、両者の類似点と相違点についていくつかの洞察を提供します。
ストリームの使用方法は非常に簡単ですが、他のアーティファクトの代わりにストリームを使用する 一般的なユースケースはあまりありません。
私が今持っているアイデア:
- 無限シリーズを利用する必要がある場合。しかし、これは私にとって一般的なユースケースとは思えないため、私の基準には合いません。(一般的で盲点がある場合は修正してください)
- 各要素を計算する必要があるが、何度か再利用したい一連のデータがある場合。これは、開発者人口の大きなサブセットにとって概念的に簡単にフォローできるリストにロードすることができるため、弱いものです。
- おそらく、大規模なデータ セットまたは計算コストの高い系列があり、必要な項目をすべての要素にアクセスする必要がない可能性が高くなります。ただし、この場合、複数の検索を行う必要がない限り、Iterator が適しています。その場合は、効率が多少悪くても、リストを使用できます。
- 再利用が必要な一連の複雑なデータがあります。ここでもリストを使用できます。この場合、どちらの場合も同じように使用するのが難しく、すべての要素をロードする必要があるわけではないため、Stream の方が適しています。しかし、それほど一般的ではありません... それともそうですか?
それで、私は大きな用途を逃しましたか?それとも、大部分は開発者の好みですか?
ありがとう
scala - Scala の不変コレクションに不変オブジェクトを保持させる方法
私は Scala を評価していますが、その不変コレクションに問題があります。
私は不変のコレクションを作りたいと思っています。これは完全に不変であり、含まれているすべてのオブジェクト、それらが参照するオブジェクトを無限に通過します。
これを行う簡単な方法はありますか?
http://www.finalcog.com/immutable-containers-scalaのコードは、私が達成しようとしていることと、厄介な回避策 (ImmutablePoint) を示しています。
この回避策の問題点は、オブジェクトを変更するたびに手動で新しいコピーを作成する必要があることです。ランタイムがコピー オン ライトを実装する必要があることは理解していますが、これを開発者に透過的にすることはできますか?
メソッドが現在のオブジェクトの状態を変更する不変オブジェクトを作成しようとしていると思いますが、オブジェクトへの他のすべての「val」(およびすべての不変コンテナー) 参照は「古い」状態を保持します。