ホーム>source

Shapeless 2.3.3 LabelledGeneric  次のケースクラスで実行すると、奇妙な結果が返されます。

scala> case class Foo(`$eq`: Int)
defined class Foo
scala> LabelledGeneric[Foo]
res0: shapeless.LabelledGeneric[Foo]{type Repr = Int with shapeless.labelled.KeyTag[Symbol with shapeless.tag.Tagged[String("=")],Int] :: shapeless.HNil} = shapeless.LabelledGeneric$$anon$1@1ac7dbd3

返されるラベルは文字通り = であることに注意してください   $eq の代わりに 。

この振る舞いは型崩れの癖なのでしょうか、それとも何か他のものですか?奇妙な動作を引き起こす他の識別子名はありますか?

MongoDBのシリアル化にはこれが必要で、この種の大きな頭痛の種は...

あなたの答え
  • 解決した方法 # 1

    QでのAlexeyのコメントによると、これはscala/java相互運用の動作方法のため、Shapelessの「機能」です。後者については、Daniel Spiewakの「operators and overaloading」の下のブロットポストで説明されています。

    ブログごとに、これが影響するオペレーターのリストは次のとおりです。

    op  Compiles To
    =   $eq
    >   $greater
    <   $less
    +   $plus
    -   $minus
    *   $times
    /   div
    !   $bang
    @   $at
    #   $hash
    %   $percent
    ^   $up
    &   $amp
    ~   $tilde
    ?   $qmark
    |   $bar
    \   $bslash
    :   $colon
    
    

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ 左マージ後の困惑したパンダのインデックスの変更