『暗黙』とうまく付き合うためのTips のメモ
概要
ScalaMatsuri 1日目 2回目 Cルーム のセッションのメモです。
(後半の内容は理解出来なかった)
暗黙の種類
このセッションでは下記の2つをおさえていく。
暗黙の引数 ( implicit parameter ), Seq#sortedは最も単純な暗黙の引数の例
暗黙の型変換 ( implicit conversion ), JavaConverters は暗黙の型変換の例、JavaとScalaで型を相互変換する
何故暗黙は難しい?
何が起きているのか明示されていない ( 明示的でない )
スコープがちょっと複雑
しばしば導出を前提にデザインされる
暗黙の引数を調べるには?
-Xprint:typer オプションを使うと、どのように暗黙の値が解決されているかが分かる
複雑なプロジェクトには、IntelliJでimplicit parameterを調べようという機能がオススメ
Implicit Parameter を調べる機能は Ctrl + Shift + A -> implicit Parameter で使える
暗黙のパラメータがどのように定義されているか分からない時はこの機能が一番良い
暗黙の型変換を調べるには?
Enrich my libraryパターンなら簡単に定義場所を飛べる
Encirh my libraryパターンではない暗黙の型変換はそもそも非推奨
一応 IntelliJ では implicit conversion を調べる機能がある
動いているコードを探すのが、暗黙解決を理解するのに手っ取り早い
Project Codes by your team
Getting Started
OSS の Example
test codes
暗黙の値をスコープに加える方法
明示的にimportしてスコープに加える / スコープ内で暗黙の値を定義する
コンパニオンオブジェクトに定義する方法
コンパニオンオブジェクトに定義する場合
スーパータイプのコンパニオンオブジェクトもスコープに入る
合成型だと両方スコープに入る
型エイリアスの元の型もスコープに入る
暗黙の引数は広いスコープではなく、importして狭いスコープで使ったほうが事故を減らせる