泛型 – 如何使用Value [T:Numeric]使代码更“灵活”,就像“未
发布时间:2020-12-16 18:50:12 所属栏目:安全 来源:网络整理
导读:如果我有像5 * 5.0的代码,结果将转换为最准确的类型,Double. 但这似乎不适用于代码 case class Value[T : Numeric](value: T) { type This = Value[T] def +(m: This) = Value[T](implicitly[Numeric[T]].plus(value,m.value)) ...}implicit def numToValue[
如果我有像5 * 5.0的代码,结果将转换为最准确的类型,Double.
但这似乎不适用于代码 case class Value[T : Numeric](value: T) { type This = Value[T] def +(m: This) = Value[T](implicitly[Numeric[T]].plus(value,m.value)) ... } implicit def numToValue[T : Numeric](v: T) = Value[T](v) 有没有办法让someIntValue像double一样工作,其中someIntValue是Value [Int]而double是Double? PS:对不起完美的标题感到抱歉.我很感谢有关更好措辞的建议…… 解决方法
您可以通过创建隐式运算符来执行此操作(通过大量繁忙工作):
abstract class Arith[A,B,C] { def +(a: A,b: B): C def -(a: A,b: B): C def *(a: A,b: B): C def /(a: A,b: B): C } implicit object ArithIntLong extends Arith[Int,Long,Long] { def +(a: Int,b: Long) = a+b def -(a: Int,b: Long) = a-b def *(a: Int,b: Long) = a*b def /(a: Int,b: Long) = a/b } ... def f[A,C](a: A,b: B)(implicit arith: Arith[A,C]) = arith.*(a,b) scala> f(5,10L) res46: Long = 50 但是你真的必须做更多的事情,因为你需要A和B的Numeric等价物,并且需要双向定义非对称操作.鉴于涉及三种类型,专业化并不实际. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- scala – 如何在构建期间从sbt-plugin访问sbt-plugin-proje
- 如何避免Vim错误消息“不是编辑器命令”
- scala – 特征上可变数量的类型
- scala – 如何在foreachPartition中使用SQLContext和SparkC
- AngularJS学习之一:AngularJS的QUICKSTART
- angular js(2)和ionic(2)的总结
- shell下action:command not found
- Unix系统下的实时监控的瑞士军刀―Glances
- 常用的webservice接口
- angularjs – 多个指令[myPopup,myDraggable]要求新的/隔离