問題タブ [for-comprehension]
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 - Scala での理解度評価の奇妙な (?)
さて、再帰がどういうわけかスタックを吹き飛ばしてしまう理由を理解するのにしばらく時間がかかりました。これが、この問題の原因となっている部分です。
これは、非常識ではありませんか?j = ...
それがで終わるかどうかを評価しif false
て、決して使用されないのはなぜですか?
{ println ... }
代わりに再帰呼び出し (および の代わりに再帰ガード) を使用するとどうなるかif false
、私は学びました。:<
どうして?!
scala - 項目の 1 つのチェックで false が返されたときに for-comprehension ループを終了する
私は Scala に少し慣れていないので、これが少し些細なことである場合は申し訳ありません。
反復したいアイテムのリストがあります。各アイテムのチェックを実行し、そのうちの 1 つだけが失敗した場合は、関数全体が false を返すようにします。したがって、これは AND 条件と見なすことができます。つまり、最初の false に遭遇した瞬間に false を返します。
私はfor - yield
、いくつかのジェネレーター (アイテムのリスト、シーケンスなど) によって生成されたアイテムをフィルター処理する構文に慣れています。ただし、私の場合は、残りのループを実行せずに、抜け出して false を返したいだけです。通常の Java ではreturn false;
、ループ内で a を実行するだけです。
非効率的な方法 (つまり、最初の false アイテムに遭遇したときに停止しない) で、次のようにすることができます。
これは基本的に、フィルターを通過するアイテムがない場合、すべてのアイテムが条件を満たしていることを示しています。しかし、これは少し複雑で非効率的です (100 万個のアイテムがあり、最初のアイテムがすでに条件を満たしていないと考えてください)。
Scalaでこれを行うための最良かつ最もエレガントな方法は何ですか?
scala - 各スロットの値の順列を生成する
OK、私はここで愚かなこと (Scala の新機能) に苦労しているに違いありません。
Action
名前(問題とは関係ありません)とリストパラメータを取るクラスがあります。
各パラメーターには可能な値のセットがあり、のパラメーターに対して可能な引数の完全なリストを生成したいと考えていますAction
。私は a を使用しようとしましたfor-comprehension
が、すべての引数を入力するのではなく、1 つの値だけを置き換えた組み合わせを取得しています。
私のコードは次のようになります (問題を説明するために単純化しました):
この関数replaceParam
は、パラメーターが引数に置き換えられたアクションを返すだけです。
したがって、パラメーター A、B、C を持つ action1 があり、それぞれが {a1、a2、a3}、{b1、b2、b3}、および {c1、c2、c3} を取ることができる場合 (それらは同じ型であると仮定します) 、私は次のようになります:
action1(a1, B, C) , action1(A, b1, C), action1(A, B, c1), action1(a2, B, C) など
しかし、私が欲しいのは:
action1(a1, b1, c1), action1(a1, b1, c2), action1(a2, b1, c1) など
これを達成するための最もエレガントな方法は何ですか?
scala - この先物のリストからリストの先物への変換がコンパイルされて機能するのはなぜですか?
免責事項: 以下のコード スニペットは、進行中の Coursera コースの 1 つに関連しています。学習目的でのみ投稿され、宿題の解決策として提出するために使用されるべきではないと考えてみましょう.
以下のコメントにあるように、Future のリストをリストの単一の Future に変換する必要があります。それ以上に、入力先物の少なくとも 1 つが失敗した場合、結果の Future は失敗するはずです。
次の実装に出会いましたが、完全には理解できません。
特に、次のことがわかりません。
- 変容はどこで
Future[T] -> T
起こる?xs <- fs2
それは私たちが最初に触れる唯一の場所のように見えFutures
、各xs
タイプはそうあるべきですFuture[T]
(しかし、どういうわけかそれはただになりますT
)。 - 障害はどのように処理されますか?
Future
入力の 1 つが失敗すると、結果のオブジェクトが失敗するように見えFutures
ます。
scala - 理解のためのフィルタリングオプション
私はアイテムのセットを持っています。それらEffect
を呼び出しましょう。リストにはCause
、possibleEffects : Set[Effect]
効果のリストを繰り返し処理し、Cause
それぞれについて最初に見つけたものだけを返す必要がありますEffect
。複数の結果を引き起こす原因が重複している可能性があるため、結果をセットにする必要があります。これは何度も実行されるため、できるだけ高速にする必要があります。私は次のことを思いつきました(それが最善の方法であるかどうかはわかりません。私はscalaが初めてです)。
find()
を返すメソッドを使用しようとしていますOption[Cause]
。返されるものを除外する方法はありますNone
か (実際には発生しません。バグがない限り、リストには常に原因があります)、理解のために Some モナドから抽出する方法はありますか? 中では使えないようですmatches
。