【问题标题】:Scala casting a number to Numeric[T] type [duplicate]Scala将数字转换为Numeric [T]类型[重复]
【发布时间】:2015-07-15 10:52:10
【问题描述】:

我正在尝试通过扩展可变哈希映射来创建直方图类,键类型可以是任何东西,而计数器类型必须是数字(int、float、long 等)。我也希望默认值为零。

我能够使用这段代码来实现它:

 class histogram[KEY, COUNT: Numeric] extends scala.collection.mutable.HashMap[KEY, COUNT] {

     /** Returns zero if a key does not exist*/
     override def default(key: KEY) = {
         zero()
     }

     def zero()(implicit n: Numeric[COUNT]) = {
         n.zero
     }
}

我找不到更好的方法来生成COUNT 类型的零,不能在default(key: KEY) 之后移动(implicit n: Numeric[COUNT]),因为它不再覆盖。

有没有更好的实现方式?

如何在不使用(implicit n: Numeric[COUNT]) 的情况下创建scala.Numeric[COUNT] 的实例?

【问题讨论】:

    标签: scala


    【解决方案1】:

    语法A: TypeClass(也称为上下文绑定)是请求隐式参数implicit aTpe: TypeClass[A] 的捷径。您可以在第一个符号using implicitly[TypeClass[A]] 中恢复该参数,或者只使用后一种语法。

    class histogram[KEY, COUNT: Numeric] 
      extends scala.collection.mutable.HashMap[KEY, COUNT] {
    
      def zero() = implicitly[Numeric[COUNT]].zero
    }
    

    或(等效)

    class histogram[KEY, COUNT](implicit numeric: Numeric[COUNT]) 
      extends scala.collection.mutable.HashMap[KEY, COUNT] {
    
      def zero() = numeric.zero
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多