2016-05-18 7 views
1

今のところ、1つの要素で構成されるIterableを渡す必要があるときは、Someの値を渡します。暗黙の変換が必要です。Scalaで単一要素の繰り返し可能性を表現するのに、最も慣れ親しんだ方法は何ですか?

Javaでは、私はjava.util.Collections.singletonを使用していました。このユースケースによく似たScalaに相当するものがあります。あなたがSeq(x)を書く単一要素のSeqを取得するだけのよう

+0

'Option [T]'は暗黙の変換(例えば '.toList')なしで反復可能にすることができます。 'List(single) 'を使っても何も問題はありません。 – cchantep

+0

私はこれを数十億回実行しているので、最も軽量な実装を使用するのは苦にならないと思っていました。(私の気持ちはJITがおそらく簡単にインライン化できるということですが) – fortran

答えて

2

Iterable(x)List(x)など

0

コレクション(IterableSeqapply方法(コンストラクタ)の実装に表情をとった後、 List)は、オブジェクトに配列を追加してラッピングし、それをループしたり別のメソッドを呼び出す必要があるvarargsを取ります。

だから私はに従うつもりだと思いますx :: Nilのようなオブジェクト;これを実現する最も軽量な方法のように見えますが、コレクションを作成していることは明白です。

+0

varargsのラッピングは、 。 IMHO、あなたは言葉機械を推測することはできません。 'f(x:X)'を 'f(xs:Iterable [X])'に追加できない場合は、暗黙のラッパーかもしれません。これは余分なラッパーと余分な構文を避けます。たぶんあなたは暗黙的に適切に範囲を設定できます。 –

+1

おそらくGenericCompanionは、他のAPIと同様に、1つの要素を取るapplyと2つ以上を取るもう1つの要素を持つ必要があります。 –

+0

だから、ぎこちなさの答えは、私たちがすでに知っていた過負荷は悪いことです。 –

関連する問題