背景
ドワンゴのScala研修資料でimplicitを勉強しています。
以下の練習問題が分かりませんでした。
問題文
List[Int] と List[Double] のsumを行うために、標準ライブラリでは何という型クラス(1つ)と型クラスのインスタンス(2つ)を定義しているかを、Scala標準ライブラリから探して挙げなさい。
解答
型クラス:
- Numeric[T]
型クラスのインスタンス:
- IntIsIntegral
- DoubleAsIfIntegral
型クラスNumeric
の探し方
「型クラス」Numeric
は以下の手順で見つけました。
- Intellij IDEAに
List[Int]().sum
を書き、Ctrl+B
でsum
メソッドのソースを見る implicit num: Numeric[B]
からNumeric
が型クラスだと判断する
scala
1trait TraversableOnce[+A] extends Any with GenTraversableOnce[A] { 2 //... 3 def sum[B >: A](implicit num: Numeric[B]): B = foldLeft(num.zero)(num.plus) 4 //... 5}
質問
「型クラスのインスタンス」IntIsIntegral
, DoubleAsIfIntegral
はどのように探せばよいのでしょうか?
全然検討がつきません。
参考サイト(追記)
関係ありそうなクラスの定義を、Numericのサイトから引用しました。
scala
1//scala.math.NumericのValue Members 2implicit object IntIsIntegral extends IntIsIntegral with IntOrdering 3implicit object DoubleIsFractional extends DoubleIsFractional with DoubleOrdering 4object DoubleAsIfIntegral extends DoubleAsIfIntegral with DoubleOrdering 5 6//scala.math.NumericのType Members 7trait IntIsIntegral 8trait DoubleIsFractional extends DoubleIsConflicted with Fractional[Double] 9trait DoubleAsIfIntegral extends DoubleIsConflicted with Integral[Double] 10
implicit object IntIsIntegral
implicit object DoubleIsFractional
object DoubleAsIfIntegral
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/28 15:05
2018/03/28 16:26 編集
2018/03/28 16:40 編集
2018/04/01 03:15
2018/04/01 03:24
2018/04/01 03:24