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

Scala Range包含(elem:Any)方法

发布时间:2020-12-16 18:24:41 所属栏目:安全 来源:网络整理
导读:显然,Range有一个方法可以检查它是否包含Any类型的值.我知道它来自SeqLike,但会导致一些问题. 例如,我从joda.DateTime匹配小时: DateTime.now match { case d if 0 to 12 contains d.hourOfDay() = ... 这里d.hourOfDay()返回DateTime.Property,而不是Int,
显然,Range有一个方法可以检查它是否包含Any类型的值.我知道它来自SeqLike,但会导致一些问题.

例如,我从joda.DateTime匹配小时:

DateTime.now match {
    case d if 0 to 12 contains d.hourOfDay() => ...

这里d.hourOfDay()返回DateTime.Property,而不是Int,但代码仍然编译,因为contains(elem:Any).有没有办法在编译时检查这样的调用?

解决方法

您可以在 pimp Range中添加类型更安全的包含方法:

class SafeRange( range: Range ) {
  def safeContains( i: Int ) = range contains i
}

object SafeRange {
  implicit def safer( range: Range ) = new SafeRange( range )
}

在任何范围实例上导入隐式和调用safeContains:

scala> import SafeRange._
import SafeRange._

scala> (0 until 10) safeContains 3
res2: Boolean = true

scala> (0 until 10) safeContains 100
res3: Boolean = false

scala> (0 until 10) safeContains "foo"
<console>:18: error: type mismatch;
 found   : java.lang.String("foo")
 required: Int
          (0 until 10) safeContains

(编辑:李大同)

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

    推荐文章
      热点阅读