14

私の知る限り、特性ListSeq言語自体の一部ではなく、Scala 標準ライブラリに実装されています。

ただし、私が理解できないことが 1 つあります。次のような可変引数関数の構文があります。

def foo(args: String*) = ...

内部的には にアクセスできargsSeq.

次のことは明確ではありません。

  • Seq言語の一部として現れるのに十分な特別なデータ構造と見なされる、または
  • ここでの*表記は、具体的なデータ構造インターフェイスへの参照を回避するための、より一般的な構文の特定のケースです。

どちらが正しい解釈かわかる方いらっしゃいますか?

4

2 に答える 2

15

それは確かに言語と図書館の間の「ぼやけ」です。Scala言語仕様v2.9は、§4.6.2の繰り返しパラメーターに次のように述べています。

パラメータセクションの最後の値パラメータには、「*」という接尾辞を付けることができます(例:(...、x:T *))。メソッド内のそのような繰り返されるパラメータのタイプは、シーケンスタイプscala.Seq[T]です。

したがって、繰り返し引数を使用する場合はscala.Seq、実行時に使用可能であると想定されます(これは、標準ライブラリの一部であるため、そうであるはずです)。

于 2012-08-13T10:02:33.543 に答える
2

初めてだと思います。それらは実際には言語の一部ではありませんが、言語が存在することを要求するいくつかのタイプがあります。Seqであなたは1つを見つけました。

于 2012-08-13T09:56:18.660 に答える