3

重複の可能性:
Scalaのパーサーコンビネーターのチルダを理解する

このplay2チュートリアルで次のことを見ました:

  val task = {
    get[Long]("id") ~
    get[String]("label") map {
      case id~label => Task(id, label)
    }
  }

どういう~意味ですか?(~Googleで検索しても何も返されませんでした)。そして、なぜそれが最初に行の終わりにあるように見え、次に2つの属性を接続しているように見えるのですか?

4

3 に答える 3

8

Scala構文を使用すると+、メソッド名で、、、などの特殊文字を使用し、それらを中置演算子として使用できます。これにより、演算子のオーバーロードと新しい演算子の作成が効果的に可能になります。これにより、コードがより簡潔になる可能性がありますが、特定のScala演算子が何をするのかを理解するのが難しくなる可能性があります。これは、GoogleでまたはまたはまたはほとんどすべてのScala演算子のメソッド名を効果的に検索できないためです。さらに難しくするために、オペランドの1つに暗黙の変換が適用される場合があるため、演算子メソッドを提供するクラスは、ソースコードで宣言されたオペランドのクラスと同じではない場合があります。*:\:++~::

更新Scalexを使用する

于 2012-12-15T16:05:15.710 に答える
5

Scalex は、これらすべての ascii および unicode 文字検索を実行できます (Horstmann の「せっかちな」本でもかなり詳しく説明されています)。

http://scalex.org/?q=~

http://scalex.org/?q=%E2%8A%9B

http://www.artima.com/pins1ed/book-index.html#indexanchor

于 2012-12-15T19:20:42.577 に答える
1

組み合わせパーサーです

実際の例

これは、大学のコンパイラ コースで割り当てられた、代数式を単純化する課題です。

( x + 0 ) - ( 1 * --x )
x + - ( 1 * --x )
x + - ( --x )
x + - ( x )
0

SQLテーブルの構築は似たようなものです

最初の部分

get[Long]("id") ~
get[String]("label")

2 つの行を解析する

マップケースは解析結果を提供します

あれもこれも見てください

これは、scala/play を学び始めたときに最初に目にしたものの 1 つです。十分な休憩を取って本全体 ( scala 2nd edition でのプログラミング) を読み、このオンライン クラスを行うことをお勧めします。

リフトも考慮する必要があります

于 2012-12-15T17:03:15.983 に答える