view

view,就像类型边界,要求对给定的类型存在这样一个函数。您可以使用<%指定类型限制,例如:

  1. class Container[A <% Int] { def addIt(x: A) = 123 + x }
复制代码


这是说 A 必须“可被视”为 Int 。
方法可以通过隐含参数执行更复杂的类型限制。例如,List支持对数字内容执行sum,但对其他内容却不行。可是Scala的数字类型并不都共享一个超类,所以我们不能使用T <: Number。相反,要使之能工作,Scala的math库对适当的类型T 定义了一个隐含的Numeric[T]。 然后在List定义中使用它:


  1. sum[B >: A](implicit num: Numeric[B]): B
复制代码


如果你调用List(1,2).sum(),你并不需要传入一个 num 参数;它是隐式设置的。但如果你调用List("whoop").sum(),它会抱怨无法设置num。
在没有设定陌生的对象为Numeric的时候,方法可能会要求某种特定类型的“证据”。这时可以使用以下类型-关系运算符:
| | |
|---|---|
|A =:= B | A 必须和 B相等|
|A <:< B | A 必须是 B的子类|
|A <%< B | A 必须可以被看做是 B|


  1. class Container[A](value: A) { def addIt(implicit evidence: A =:= Int) = 123 + value }
复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值