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

如何提供编译时保证我的方法将返回它在Scala中获取的相同对象?

发布时间:2020-12-16 18:38:15 所属栏目:安全 来源:网络整理
导读:在 Scala类中,我可以方便地将方法的返回类型声明为this.type,以保证它将返回调用它的同一对象: class Foo { def bar: this.type = this} 有没有办法可以类似地指定接受给定AnyRef参数的方法将完全返回该引用?以下代码段不提供此保证,我可以返回A的任何实例
在 Scala类中,我可以方便地将方法的返回类型声明为this.type,以保证它将返回调用它的同一对象:

class Foo {
  def bar: this.type = this
}

有没有办法可以类似地指定接受给定AnyRef参数的方法将完全返回该引用?以下代码段不提供此保证,我可以返回A的任何实例:

def processAndReturn[A <: AnyRef](obj: A): A = {
  // work with obj
  obj
}

解决方法

huitseeker的建议实际上对-Ydependent-method-types选项有效:

$scala -Ydependent-method-types
Welcome to Scala version 2.9.0.1 (Java HotSpot(TM) 64-Bit Server VM,Java 1.6.0_24).

scala>   def processAndReturn[A <: AnyRef](obj: A): obj.type = {
     |       // work with obj
     |       obj
     |   }
processAndReturn: [A <: AnyRef](obj: A)obj.type

scala> processAndReturn("hi")
res1: java.lang.String = hi

从this thread开始,我认为实验依赖方法类型已经存在了一段时间,甚至还有一篇已发表的论文使用它们,但实现可能有些错误.关于重新设计Scala的类型系统基础已有一些讨论(参见Adriaan Moor关于从属对象类型的slides).如果它成功了,我想在Scala的未来版本中,依赖方法类型(以及其他内容)将完全犹豫不决.

(编辑:李大同)

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

    推荐文章
      热点阅读