2011-12-06 14 views
10

形質Map[A,+B]メソッドTypeパラメーター(A、B)

def minBy [B] (f: ((A, B)) ⇒ B)(implicit cmp: Ordering[B]): (A, B) 
を有します

私は形質のBは方法の1と同じであると予想されるが、私はまだこれの意味することはできません、その後:

ここ
val m2 = Map('a -> "1", 'b ->"2" ,'c ->"3") 
m2.minBy((t:(Symbol,String))=>Integer.parseInt(t._2)) 

Map[A,+B]BStringですが、minByBInt - またはerr?

だから私は方法の種類ではなく

def minBy [C] (f: ((A, B)) ⇒ C)(implicit cmp: Ordering[C]): (A, B) 

ことが期待しかし、ソースが言うことではないthatsの。

両方が異なる場合は、どこで知っていますか? もしそうでなければ、私の間違いを見つけて指摘できますか?

答えて

6

分析は正しいですか、Cなどの名前を付ける必要があります。問題は、scaladocは、マップなので、TraversableLikeの定義のAをタプル(A、B)に置き換えることです。これはTraversableLikeからの定義である:それはマップですので

def minBy [B] (f: (A) ⇒ B)(implicit cmp: Ordering[B]): A 

、scaladocはタプル(A、B)と(A)に置き換えられます。

def minBy [B] (f: (A, B) ⇒ B)(implicit cmp: Ordering[B]): (A, B) 

実際には正しい署名ではありません。

これは既知の問題です。scaladoc does not disambiguate between same-named type parametersです。投票するか、パッチを提出してください!

+0

ああ、大丈夫、私はそのソースの発言について間違っていました。 minByメソッドはGenTraversableOnceで宣言され、TraversableOnceで定義されています。どちらもBについては知らないので、実際はスカラドックの問題です。あなたがた両方に感謝します。 – Theodosius

7

ドキュメントを構築するソフトウェアがB変数の名前をminByという特性の名前から変更して名前の衝突を引き起こしたようです。あなたの分析は正しいようです。

ラムダ計算からの用語を使用するには、ソフトウェアがalpha-convertに失敗したとします。

関連する問題