この広告は、90日以上更新していないブログに表示しています。2012の18日目です。総力尽くして色々解読してますが、補足・間違い等ありましたらご指摘ください。Parameter)についても一緒にまとめようと思ったけど、長くなりそうだったので省きます...。こりゃ確実に刺されますね、はい。説明すると、Scalaのコンパイラは型の不一致によるエラーを検出した際に悲鳴をあげる前にスコープ内のimplicitキーワードで定義されたメソッドを用いて解決を図ります。解決出来る場合はそのメソッドを自動的に挿入して実行に移ります。既存のライブラリ直接弄ることなく拡張できちゃうすんばらしぃ機能です。Conversionは主に「要求された型への変換」と「レシーバーの変換」の二つに分けられます。1ってな感じで暗黙の内に変換してくれます。Xmas!!ということで、あたかもStringにlonelyメソッドが存在するかの如く振る舞ってくれちゃいます。Conversionを発動!させるにはもちろん制限・条件があります。2.10では以下の様に書くことが出来ます。́・ω・`)ちょっと探検だいたいおおよそおおざっぱにお分かり頂けたと思うので、超お馴染みなScalaのString型がどのようにして「すげぇRich///」になってるのか見てみましょう。*1コップ本にもこの話はありますので読むといいかもです。Scalaコンパイラは拡張子.scalaが付いたファイル全てに以下のインポート文を暗黙のうちに追加しています。...}の様に定義されています。StringOpsに変換されます。一通り眺めるだけでお腹一杯になれます。2.7の頃のString型は現在のWrappedStringへ変換されていました。WrappedStringとStringOpsはreverseやfilterメソッドの返り血が異なるくらいで、あとは似たようなものかと。Predefに定義されている型変換を行います。*2:実際にはStringLikeトレイトまでで大半を実装してるのでStringOpsクラスのソース自体は非常に小さいです。*3:WrappedStringはStringLike[WrappedString]、StringOpsはStringLike[String]をmixinしています。*4:複数の型変換が存在する時、コンパイラはサブクラス側の型変換を選択します。アドベント...2015-12-23Platedとは何なのか?この記事はadventar版Scalaアドベントカレンダーの21日目です。...2015-12-18macro-compatを使ってmacroの互換性を簡単に管理するこの記事はadventar版Scalaアドベントカレンダーの17日目です。»プロフィールid:Aoino新宿でScala書くお仕事してます。モナモナした話が大好きです。(3)はてなブログをはじめよう!Aoinoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。