として解析コロン2つのアンダースコア:スカラ:私は最近プレイのJSONライブラリで遊んで、これはコンパイルできないことに気づいた1トークン
val steps = Seq("a", "b", "c")
steps.foldLeft(__)((a, x) => a \ x)
少し工夫した後、ソースを閲覧し、I第二が...
steps.foldLeft(__())((a, x) => a \ x)
:
steps.foldLeft(JsPath())((a, x) => a \ x)
かさえ:正しい表現を見つけました1つはかなり難読化されています。
は、後になって、私は、より効率的かつ簡潔な表現が見つかりました:
JsPath(steps.toList map KeyPathNode)
をしかし、私は、元の式に戻って、それで遊んで続けました。私は、これが機能することを発見:
steps.foldLeft(JsPath: JsPath)((a, x) => a \ x)
はどういうわけか、これはそうではない:
steps.foldLeft(__: JsPath)((a, x) => a \ x)
は私がerror: not found: value __
を取得します。しかし、これは動作します:
steps.foldLeft((__): JsPath)((a, x) => a \ x)
これはあまりにも動作します:
steps.foldLeft({__}: JsPath)((a, x) => a \ x)
また、この:
steps.foldLeft(__.asInstanceOf[JsPath])((a, x) => a \ x)
なぜそれが__: JsPath
との表現が失敗したということでしょうか?パーサが1つのトークンとして__:
を解釈しているようだ
steps.foldLeft(__ : JsPath)((a, x) => a \ x)
:私はこの質問を提出することを約あった直前
は... Aaaaaand私は別のワーキング表現を見つけました。しかし、それはなぜでしょうか?私はアンダースコアはもう一つの有効な識別子文字だと思った。特別なケースの解析ルールがありますか?
コメントでアップアップすることはできませんが、クリック可能なクォートは非常に便利です。情報を追加するだけです:アンダースコアはパターンvarid: '42 match {case __:=> __:}'の小文字です。今、ユースケースが必要です。私はかつて大文字の矢印を整列させるための拡張されたアンダースコアを試しましたが、おそらく多分私は試してみます。42 match {case __ ========> =>()} ' –
それは好奇心です。私はhttps://groups.googleでこれについて尋ねました。com/forum /#!topic/scala-user/sh20Vr2BK9Y。 –