• Like
Implicit Implicit Scala
Upcoming SlideShare
Loading in...5
×

Implicit Implicit Scala

  • 2,028 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,028
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
5
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Implicit Implicit Scala(あるいは bpstudy #49の補足) 水島 宏太 (@kmizu)
  • 2. 自己紹介
  • 3. @kmizu http://twitter.com/kmizu @ktmizushima (English) http://twitter.com/ktmizushima id:kmizushimahttp://d.hatena.ne.jp/kmizushima Scala辻斬り ヒーラー
  • 4. 今回説明すること
  • 5. implicit parameter/conversion
  • 6. この二つの関係
  • 7. に関する正しい理解
  • 8. implicit parameter入門は
  • 9. http://www.slideshare.net/kmizushima/implicit-explicit-scala
  • 10. 参照してください
  • 11. とりあえず世間的(?)な認識
  • 12. (A), (B) の方対象に説明(A). 区別が付かない。ごっちゃになっている(B). implicit parameter重要。二つは別物(C). なんか黒魔術っぽい
  • 13. implicit conversionの基本形(誤)
  • 14. implicit def aToB(a: A): B = ...
  • 15. implicit conversionの基本形(正)
  • 16. implicit val aToB: A => B = {a => ... }implicit value aToB: A => Bを定義
  • 17. Why?
  • 18. Scala Language Specification (2.9.0)7.3 Views(p.193) より引用• Implicit parameters and methods can also define implicit conversions called views.• A view from type S to type T is defined by an implicit value which has function type S=>T or (=>S)=>T or by a method convertible to a value of that type.
  • 19. implicit def ... でconversionを定義できるのはmethod type: (A) B function type: (A => B)への変換が可能だと言語仕様で規定されているため
  • 20. 基本形はあくまで
  • 21. implicit val aToB: A => B = {a => ... }
  • 22. 何が言いたい?
  • 23. implicit conversion ⊂ implicit parameter
  • 24. implicit conversionは
  • 25. implicit parameterの枠組みの 中で定義されている
  • 26. implicit valueの中で 単に A => B 型(or それに変換可能なメソッド型) を持ったものがものが implicit conversion
  • 27.
  • 28. implicit val i2s: Int => String = _.toString1234.substring(1) "234"
  • 29. def getOrdered[A](a: A)(implicit f: A => Ordered[A]): Ordered[A] = a // a f(a) // implicit conversion is appliedgetOrdered(100) Ordered[Int]
  • 30. 説明は以上
  • 31. ちょっとした応用例
  • 32. recursive implicit conversion (parameter)
  • 33. class DepthCalculator[M[_]] { implicit def to0[T](k: T): Int = 0 implicit def toN[T](k: M[T])(implicit f: T => Int) :Int = f(null.asInstanceOf[T]) + 1 def depth[T](implicit fn: T => Int) = fn(null.asInstanceOf[T])}implicit val calculator = new DepthCalculator[Array]import calculator._println(depth[String]) 0println(depth[Array[String]]) 1println(depth[Array[Array[String]]]) 2println(depth[Array[Array[Array[String]]]]) 3
  • 34. 無限に展開が続く場合
  • 35. コンパイルエラー
  • 36. ご静聴?ありがとう ございました
  • 37. 通称コップ本 第二版 好評発売中Scala 2.8対応+付録Scala 2.9記事(by @kmizu)
  • 38. 宣伝(2)
  • 39. こんなキーワードにピンと来たら(ry Cakeパターン, CONCEPTパターン, 限定継続 現場でのScala, Javaとの連携