10

次のscalaコードが与えられた場合:

var v1 = Vector("foo")
v1 :+= ""

何をし:+=ますか、それはどのように異なり+=、どこで定義されていますか?

ありがとう!

PS: はい、これを検索しましたが、何も見つかりませんでした。この ( http://simply.liftweb.net/index-2.3.html#prev ) チュートリアルで見つかりました。

4

1 に答える 1

14

Scala シーケンスには、古いシーケンスに何かを追加して新しいシーケンスを生成する 3 つの演算子が++あり+:ます:+。この++演算子は、単に Scala シーケンスを別のシーケンス (またはトラバース可能) と連結するだけです。他の 2 つの要素は、それぞれ prepend 要素と append 要素です。

+:andの特殊な構文は、:+その使用方法によるものです。で終わるすべての演算子は、左側ではなく右側:のオブジェクトに適用されます。あれは:

1 +: Seq.empty == Seq.empty.+:(1)

対称的に、もう一方の演算子は ですが:+、その場合コロンは意味がありません。これにより、次のように記述できます。

scala> 1 +: 2 +: 3 +: Seq.empty :+ 4 :+ 5 :+ 6
res2: Seq[Int] = List(1, 2, 3, 4, 5, 6)

追加される要素が、式に表示されるのとまったく同じ位置に配置されることに注意してください。これにより、何が起こっているのかを簡単に視覚化できます。

さて、あなたは:+=上記のどれでもない を持っています。たまたま、Scala では=、get-and-set 操作を構成するために任意の演算子を連結できます。したがって、一般的なインクリメント式は次のとおりです。

x += 1

実際の意味

x = x + 1

同じく、

v1 :+= ""

意味

v1 = v1 :+ ""

空の文字列を古いベクトルに追加して新しいベクトルを作成し、それを に割り当てv1ます。

于 2013-02-22T22:04:57.047 に答える