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

scala – 使用隐式作为类型约束

发布时间:2020-12-16 10:04:38 所属栏目:安全 来源:网络整理
导读:据我所知,有两种方法可以添加类型约束. trait Dummy 第一种方式 def doStuff[T : Dummy](x: T) = x 第二种方式 def doStuff[T](x: T)(implicit x: T : Dummy) = x 两者都达到了相同的效果. 我只是想知道我应该直接使用上限或下限的哪种场景,或者我应该使用im
据我所知,有两种方法可以添加类型约束.

trait Dummy

第一种方式

def doStuff[T <: Dummy](x: T) = x

第二种方式

def doStuff[T](x: T)(implicit x: T <:< Dummy) = x

两者都达到了相同的效果.

我只是想知道我应该直接使用上限或下限的哪种场景,或者我应该使用implicit来在类型上附加约束.

解决方法

一个必须在每次调用调用时创建一个隐式对象,另一个只是在传递给函数的对象上放置一个类型约束.一般来说,我更喜欢声明,其中你陈述[T&lt ;:Dummy]而不是隐含的.

当你想要创建一个可以做某些事情的类型但只有当它满足某个约束时,你使用隐式的地方.因此,您在List [A]声明中看到以下内容:

def sum(implicit ev: Numeric[A]) = ...

这是一种很好的说法,“你可以在类中放置任何类型的’A’,但是如果你想使用’sum’,它必须符合……”以下面的类定义为例:

class Foo[T](value: T){
   def doubleString = value.toString() + value.toString()

   def specialSauce(implicit ev: T <:< Dummy): Dummy = ...
 }

这允许我选择创建某种类型的Foo [Int]并且它将起作用但不允许我调用该类的specialSauce方法,除非T是Dummy的直接后代.

(编辑:李大同)

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

    推荐文章
      热点阅读