問題タブ [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 - 戻り値がNoneの場合のロギングの追加
2つの関数がfindUser(id:String):Option[User]
ありfindAddress(user:User):Option[Address]
、次のように呼び出されたとします。
ここで、これにエラーログを追加したいと思いますfor-comprehension
。どちらかが見つからないlog(msg:String)
場合は、関数を呼び出したいと思います。user
address
関数のシグネチャを変更せずにそれを行うことはできますか?
scala - マップ操作のシーケンスを for-comprehension に変換する
私は Scala でのプログラミング セクション 23.5 で、map、flatMap、およびフィルター操作は常に for-comprehensions に、またはその逆に変換できることを読みました。
次の同等性が与えられます。
一連のマップ操作から計算された値があります。
これが理解のためにどのように見えるのか疑問に思っています。どのように翻訳すればよいですか?
(参考になれば、これは次のとおりです。
- 1 から 100 までの整数を取る
- それぞれについて、100 個のブール値のリストを作成します
- 各リストを XOR 演算子で折り畳み、ブール値に戻します
- ブール値に応じて、「開いている」または「閉じている」100個の文字列のリストを生成します
マップ操作を変換する標準的な方法があり、それらの実際の機能の詳細は重要ではないと思います。間違っているかもしれませんが。)
scala - for..elseのScalaのオプションタイプ?
2つのオプションがあり、両方がSomeの場合は、1つのコードパスを実行し、注意する場合は別のコードパスを実行するとします。のようなことをしたい
if
ステートメントまたはパターンマッチング(3つ以上のオプションがある場合はスケーリングされない可能性があります)以外に、これを処理するためのより良い方法はありますか?
scala - scala の for-comprehensions が遅延するのはいつですか?
Python では、次のようなことができます。
しばらく時間がかかりますが、メモリ使用量は一定です。
scala での同じ構造:
しばらくすると、java.lang.OutOfMemoryError
遅延評価する必要があるにもかかわらず、 が表示されます。
scala - Scalaで理解のためにネストするのは良いスタイルですか?
次のようなコードを書いていることに気づきました。
ご覧のとおり、値emaps
は文字列の配列から作成されたDoubleの配列です。正常に動作します。私は今まで見たことがありません-このようにネストされた内包表記。大丈夫ですか、それとも何とかリファクタリングする必要がありますか?
scala - なぜ Scala は、Either と値の定義を含む 'for' 式にタイプ 'Product' を選択するのですか?
Option を使用して値の定義を使用して for を作成すると、期待どおりに機能します。
値の定義がない場合、Either で同じことを行うと機能します。
しかし、値の定義を使用すると、scala は for 内包の間違ったコンテナー タイプを推測するようです。
なぜこれを行うのですか?この動作を回避する方法は何ですか?
scala - 理解のためのscalaのprintln
for-comprehension では、print ステートメントだけを入れることはできません。
しかし、ダミーの割り当てを使用して簡単に回避できます。
副作用であり、(これまでのところ) 開発中のコードでのみ使用されていますが、より良いアドホック ソリューションはありますか?
副作用以外に、使用すべきではない深刻な問題はありますか?
実際のコードを示す更新。1 つのソリューションを適応させるのは予想よりも困難です。
Rex Kerr との議論から、元のコードを表示する必要性が高まりました。これはもう少し複雑ですが、質問には関係ないように思われました (2x .filter、最後にメソッドを呼び出す)。 Rex のパターンを適用しようとして失敗したので、ここに投稿します。
ここに私の試みがあります - (b * a).filter は間違っています。結果は int であり、フィルター可能な int のコレクションではないからです:
パート II はコメントに属していますが、そこに書かれている場合は読むことができません。最終的には削除するかもしれません。すみません。
OK - コード レイアウトでの Rex の最後の回答は次のとおりです。
scala - 理解のために単一の値をバインドする
Learn You a Haskellチュートリアルには、リスト内包表記でバインダーを使用let
する例があります。
この関数は、身長と体重のペアのリストを取得し、ある制限を超える対応する体重指数のリストを返します。例:
ここで私が興味を持っているのはbmi
、理解の範囲内でバインドされている値が、ガードと結果の式の両方で使用できることです。Scalaで同様のことを行う方法を私が知っている唯一の方法は、次のように書くことです。
ここで私の価値を包み込まなければならないのSome
は間違っていると感じます。誰もがより良い方法を知っていますか?
scala - 理解のためのモナド変換子
検討:
今、私は次のようなメソッドを書きます:
ただし、推測される型はOption [Option [Long]]であるため、もちろんこれはコンパイルされません。
Scala構文と標準ライブラリに関してOption[Long]を取得する方法はありますか?パターンマッチングができることは知っていますが、理解のためにそれを使用して実行できるかどうかという疑問が生じただけです。
答えてくれたtenshiに感謝します、それは仕事をします、しかし私はちょうど私の問題の別の例に遭遇しました:
a
for asとして追加できます:a <- Some(A(c))
しかし、暗黙的にはどうですか?それは私のコードの設計変更を意味する必要がありますか?
scala - 2 つのリストのデカルト積
数字が複数の文字に関連付けられているマップを考える
数字のシーケンスに基づいて、可能なすべての文字シーケンスを生成したいと考えています。例:
理解のためにこれを行うことができます
インデックスごとに可能な文字のシーケンスを作成します
可能なすべての文字列を生成する
ここで事態は悪化し、3 桁のシーケンスに対してのみ機能します。どのシーケンス長でも同じ結果を得る方法はありますか?