加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

更多关于通用Scala功能

发布时间:2020-12-16 09:44:09 所属栏目:安全 来源:网络整理
导读:尝试在Scala中实现以下Haskell函数(从Learn You a Haskell …),以便它与Int,Double等一起使用 doubleUs x y = x * 2 + y * 2 请注意,这与Scala: How to define “generic” function parameters?类似 这是我的尝试和错误。有人可以解释发生了什么,并提供
尝试在Scala中实现以下Haskell函数(从Learn You a Haskell …),以便它与Int,Double等一起使用

doubleUs x y = x * 2 + y * 2

请注意,这与Scala: How to define “generic” function parameters?类似

这是我的尝试和错误。有人可以解释发生了什么,并提供解决方案。谢谢。

scala> def doubleUs[A](x:A,y:A)(implicit numeric: Numeric[A]): A = numeric.plus(numeric.times(x,2),numeric.times(y,2)) 
<console>:34: error: type mismatch;
 found   : Int(2)
 required: A
       def doubleUs[A](x:A,2))

解决方法

您使用的是Int文字2,但scala正在使用数字类型A.
Scala Numeric API具有一个实用功能,可以从Int(x:Int):T.这是你想要使用的,所以用numeric.fromInt(2)替换2的用法,

def doubleUs[A](x:A,y:A)(implicit numeric: Numeric[A]): A =
  numeric.plus (numeric.times (x,numeric.fromInt (2)),numeric.times (y,numeric.fromInt (2)))

另外,由于Numeric实例定义了一个隐式转换为Ops,您可以导入numeric._,然后从Int(2)中的x * fromInt(2)y *。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读