問題タブ [implicits]
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.
programming-languages - "a la Scala" の暗黙をサポートするその他のプログラミング言語
Scala の暗黙関数は非常に強力です。それらが Scala の新しい/ユニークな機能なのか、それとも他のプログラミング言語に既に存在していた概念なのか、興味があります。
ありがとう。
編集:
私の質問を明確にするために、はい、私はこの具体的な実装について話しています。「暗黙的なもの」があちこちにあるのは最初は奇妙に思えましたが、しばらく使ってみて他の人の使い方を見て、うまく機能していることに感銘を受けました。
scala - 「パラメータ化された型を存在的に抽象化することはできません...」
私は楽しみのために Scala 2.8 をいじり、型コンストラクターに「as」メソッドを追加して、あるファンクターから別のファンクターに変換できるpimpを定義しようとしていました (ここで必ずしもファンクターを扱っているわけではないという事実を見落としてください)。 . たとえば、次のように使用できます。
だからここに私がやろうとしたことがあります:
ただし、 の定義には、 「パラメータ化された型 G[T] を実存的に抽象化できません」naturalTransformations
というエラーが表示されます。これを修正するには、次のように追加のクラスとともに書き直すことができます。naturalTransformations
Transformable
そしてそれはうまくいくようです。しかし、私の最初の試みは同等だったはずなので、なぜ失敗したのか、エラーメッセージが何を意味するのか興味があります.
scala - Scala の型クラス
Haskell のバックグラウンドを持つ私は、現在 Scala に慣れようとしています。
小さくて拡張可能な式言語を Haskell から Scala に変換しようとして、いくつかの問題に遭遇しました。新しいデータ バリアントと操作の両方で拡張可能なデータ型を作成する際の根本的な問題は、式の問題として一般に知られています。
Haskell での私のオリジナルのソリューションでは、制約付きの型クラスとインスタンス宣言を使用します。私の表現のベースは次のように定義されています。
次に、乗算を追加する 1 つのデータ拡張があります。
運用拡張機能として pretty-printer を考えてみましょう。
最後に、4 番目のモジュールでは、2 つの独立した拡張機能を組み合わせることができます。
さて、私の問題: 通常、haskell の型クラスは、Scala では暗黙の概念パターンに変換されます。これは私が得た距離です:
ここでは、Plus の暗黙的なオブジェクトの実装に行き詰まっています。型パラメーターと制約を使用して暗黙的なオブジェクトを宣言するにはどうすればよいですか?
Scala の式の問題には他の解決策があることは知っていますが、特にこのバージョンに興味があります。
私のやや長い質問を読んでくれてありがとう。
scala - パラメータ順序付けの暗黙的な値が見つかりませんでした
これをコンパイルしようとすると、次のエラーが発生します。
Btree.scala:9: エラー: パラメータの順序付けの暗黙的な値が見つかりませんでした: Ordering[K] 抽象クラス Node[K,V] extends TreeMap[K,V]
TreeMap は、私が提供する暗黙の Ordering[A] val を受け入れることになっています。おそらく、暗黙のパラメーターは、Btree(TreeMap) がインスタンス化されるオブジェクト Tester にある必要がありますか? Ordering に Comparable[K] を実装する型 K を持たせたいので、暗黙の宣言を Btree クラス内に保持することをお勧めします。わかる?
scala - 「暗黙的に」Scala識別子とは何ですか?
implicitly
Scala の例で使用されているという名前の関数を見たことがあります。それは何で、どのように使用されますか?
ここに例:
implicitly[Foo[A]].apply(x)
コンパイラーは 、パラメーターを指定implicitly[Foo[A]](x)
して呼び出すことを意味すると見なすため、記述する必要があることに注意してimplicitly
ください。
オブジェクト/タイプ/その他を調査する方法も参照してください。Scala REPLから?そしてScalaはどこで暗黙を探しますか?
scala - Scala コンパイラは、暗黙的で匿名のクラスが使用されている場合、私のメソッドは再帰的であると言います
のようなコードを書けるようになりたい
だから私はそれを暗黙的にできると思った。
Scala REPL で次のコードを実行すると、正しく定義されます
しかし、コンパイルしようとすると、
エラーで失敗します
違いはなんですか?私は何を間違っていますか?
scala - Scala コンテキストとビュー境界とは?
簡単に言えば、コンテキストとビューの境界とは何ですか?また、それらの違いは何ですか?
いくつかのわかりやすい例も素晴らしいでしょう!
scala - 発散する暗黙の展開エラーとは何ですか?
別の質問 ( [1] )の解決策を見つけようとしているときに、発散する暗黙の展開エラーに遭遇しました。これが何を意味するかについての説明を探しています
ユースケースは次のとおりです。
scala - 暗黙のメソッドの中間型を実装する方法は?
私のコントロールの外にあるfoo
既存のタイプのメソッドを提供したいとします。A
私の知る限り、Scalaでこれを行うための標準的な方法は、を実装A
するある型への暗黙の変換を実装することfoo
です。今、私は基本的に2つのオプションを見ています。
次の目的のために、別の、場合によっては非表示のクラスを定義します。
/li>匿名クラスをインラインで定義します。
/li>
バリアント2)は、特に多くのタイプパラメータが発生する場合、確かに定型文が少なくなります。一方、1)でグローバルに1つのクラスが作成されるのではなく、(概念的には)変換ごとに1つのクラスが作成されるため、オーバーヘッドが増えるはずです。
一般的なガイドラインはありますか?コンパイラ/VMは2)のオーバーヘッドを取り除くので、違いはありませんか?
scala - Scalaで暗黙を連鎖させるにはどうすればよいですか?
pimp-my-libraryパターンを使用すると、クラスからメソッドを実装するクラスへの暗黙的な変換を利用できるようにすることで、クラスにメソッドを追加できるように見えます。
ただし、Scalaでは、このような2つの暗黙的な変換を行うことはできません。そのため、暗黙のtoと別の暗黙のtoA
をC
使用することはできません。この制限を回避する方法はありますか?A
B
B
C