1

Mapオブジェクトのmapメソッドのscaladocによると、新しいMapを返す必要があります。

 def   map  [B]  (f: ((A, B)) ⇒ B)  : Map[B]   

「指定された関数fをこのマップの各要素に適用し、結果を収集した結果の新しいマップを返します。」

しかし、そうではありません。

scala> val countries = Map("NO" -> "Norway", "US" -> "United States", "DE" -> "Germany")
countries: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map((NO,Norway), (US,United States), (DE,Germany))

countries map { _._1 }
res4: scala.collection.immutable.Iterable[java.lang.String] = List(NO, US, DE)

ただし、この動作は私が期待するものです。それで、ドキュメントは間違っていますか、それとも私は何かが欠けていますか?

4

2 に答える 2

5

間違ったマップ関数を読んでいます。

def map [B](f:((A、B))⇒B):Map [B]

しかし、あなたは使用しています:

def map [B、That](f:((A、B))⇒B)(implicit bf:CanBuildFrom [Map [A​​、B]、B、That]):That

文字列を返すので、最初は使用せず、2番目を使用します。そしてそれのためにScalaDocは言います:

「与えられた関数fをこのマップの各要素に適用し、結果を収集した結果として生じるタイプの新しいコレクション。」

于 2010-09-28T11:51:22.153 に答える
5

@usecaseScaladocへの追加は、かなり急いで考案および実装され、いくつかのしわがあります。この場合、ユースケースはScaladocで次のように定義されていますTraversableLike#map

@usecase def map[B](f: A => B): $Coll[B]

$Collで定義された値を使用して、単純なテキスト置換に置き換えられますscala.collection.Map

/**
 *  @define Coll Map
 *  @define coll map
 */
object Map extends MapFactory[Map]

これについて何ができるでしょうか?おそらく、テキスト置換の結果をタイプチェックすることができます。これにより、これらのエッジケースが除外されます。

于 2010-09-28T16:51:25.903 に答える