60

私はScalaリフトを同時に学んでいて、Boot.scalaでSiteMapを初期化するために使用される構文を理解することに固執しました。

 val entries = Menu(Loc("Home", "/", "Home")) :: 
       Menu(Loc("Foo", "/badger", "Foo")) ::
       Menu(Loc("Directory Foo", "/something/foo", "Directory Foo")) :: Nil 
 LiftRules.setSiteMap(SiteMap(entries:_*))

SiteMapパラメータの意味は正確には何ですか?値のエントリがメニューのリストであることがわかります。コロン、アンダースコア、スターとは何ですか?最初はリストに載っているメソッドだと思っていたのですが、そのような定義が見つかりません...

4

1 に答える 1

78

OK、私の同僚がこの秘密の呪文にScala でのプログラミングの本で遭遇したと言った後、私は自分のコピーを検索し、セクション 8.8 繰り返しパラメーターで説明されていることを見つけました。(コロンとアンダースコアの間にスペースを入れて検索する必要がありますが:-/)それを説明する一文があります:

... 次のように、配列引数にコロンと_*記号 を追加します。scala> echo(arr: _*)

この表記法は、 のすべての要素を 1 つの引数として渡すのではなく、の各要素をarr独自の引数としてに渡すようにコンパイラに指示します。echo

ここで提供されている説明がより役立つと思います。

これx: _*は、繰り返しパラメーター(別名可変長引数リスト — vararg )として扱うようにコンパイラーに指示する型宣言のようなものです。x

于 2009-07-14T08:31:08.937 に答える