私が見たものから:
それを一緒に入れて:
import reflect.Selectable.reflectiveSelectable
trait Data
object Main
{
def main(args: Array[String]): Unit =
{
val data: Data { val value: Int } = new Data {
val value: Int = 1
}
println(data.value)
}
}
これをしなければならない理由は、洗練されたくない場合に、洗練されたことが何度もあったためだと思います (たとえば、すべてのテスト フィクスチャのテストnew Fixture { ... }
は不必要に洗練された型でした)。もう 1 つは、洗練が (Scala 2 で) 洗練にアクセスするときにリフレクションを使用することです。これはパフォーマンスの低下を引き起こします。したがって、これは偶然ではなく意識的に行うべきことです。
Scala 3 では、構造型はdynamicsSelectable
を使用して実装されますが、これにはtraitでの混合が必要です。そのため、暗黙の変換をインポートして Scala 2 のように機能させる必要があります。@Dmytro Mitin の提案に従ってscala.reflect.Selectable.reflectiveSelectable
追加する前のように機能させたい場合は、リフレクションを追加します。import reflect.Selectable.{ given _ }
パッケージにエクスポートするなどしてグローバルに実行することもできますが、それは自己責任で行ってください。