Scala の暗黙関数は非常に強力です。それらが Scala の新しい/ユニークな機能なのか、それとも他のプログラミング言語に既に存在していた概念なのか、興味があります。
ありがとう。
編集:
私の質問を明確にするために、はい、私はこの具体的な実装について話しています。「暗黙的なもの」があちこちにあるのは最初は奇妙に思えましたが、しばらく使ってみて他の人の使い方を見て、うまく機能していることに感銘を受けました。
Scala の暗黙関数は非常に強力です。それらが Scala の新しい/ユニークな機能なのか、それとも他のプログラミング言語に既に存在していた概念なのか、興味があります。
ありがとう。
編集:
私の質問を明確にするために、はい、私はこの具体的な実装について話しています。「暗黙的なもの」があちこちにあるのは最初は奇妙に思えましたが、しばらく使ってみて他の人の使い方を見て、うまく機能していることに感銘を受けました。
Looks like the inspiration was Haskell's type classes. At least one blog article claims that implicits have their origin in Haskell type classes; the article refers to a 2006 paper by Martin Odersky entitled, Poor Man's Type Classes. And Daniel Sobral wrote a recent article on how to simulate type classes with implicits.
2000 年に Princples of Programming Lanages (POPL) で非常に優れた論文があり、暗黙のパラメーターが導入されました。これらは Haskell で実装されています。Scala の設計者である Martin Odersky は、この作業を認識していたに違いありません。(Martin は、POPL に頻繁に参加し、歓迎されています。)
Another reference: "Type Classes as Objects and Implicits" (2010), by Bruno C. d. S. Oliveira, Adriaan Moors and Martin Odersky.
Scala の暗黙関数ほど強力ではありませんが、C++ には既に変換演算子とコピー コンストラクターがあり、両方とも暗黙的な型変換を行うことができます。二項演算子 (Scala では許可されていないもの) を定義する機能と組み合わせることで、Scala の暗黙の機能の一部が提供されました。
「暗黙をサポートする」というフレーズをどれだけ広く拡張したいかによって異なります。Scala での Implicit の説得力のある理由の 1 つは、既存のクラス (アクセス権がないクラス) に本質的にメソッドを追加することです。これは、さまざまな構造を介して他の言語で可能です。たとえば、Smalltalk、Ruby、および Objective-C はすべて、制御しないクラスへのメソッドの追加をサポートしています。
http://patricklogan.blogspot.com/2007/06/scala-implicits.htmlから暗黙を正しく理解していれば、はい、それをサポートする言語がいくつかあります。
最良の例は、C# 拡張メソッドです。私がそれらを使用した最近の例:
2 つの 間の距離計算をしなければならないことがよくありましたPoint
。APoint
には別のポイントまでの距離を計算する方法がないため、次のコードをプロジェクトに追加しました:
class MyPointExtension
{
public static Double GetDistance(this Point p1, Point p2)
{
return /* the pythagoras code */
}
}
次に、次のことができます。
Point unitPosition = new Point(x,y);
Point target = new Point(x2,y2);
Double distance = unitPosition.GetDistance(target);