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

为什么Scala没有decltype?

发布时间:2020-12-16 18:31:06 所属栏目:安全 来源:网络整理
导读:有时可能想要声明x与y的类型相同.使用vals类型推断可以很好地处理这个问题,但是这在其他一些方面不起作用,比如 with function types. 对于具有一些C经验的程序员而言似乎显而易见的解决方案将是decltype.在当前的Scala中似乎没有这样的设施. 对链接问题的回
有时可能想要声明x与y的类型相同.使用vals类型推断可以很好地处理这个问题,但是这在其他一些方面不起作用,比如 with function types.

对于具有一些C经验的程序员而言似乎显而易见的解决方案将是decltype.在当前的Scala中似乎没有这样的设施.

对链接问题的回答告诉我们:

because types are not first class citizens

我不得不承认我不理解这一点.我不认为类型是C中的一等公民,但它仍然可以具有decltype.我不是要问泛型中的类型参数的decltype或类似的东西(我理解泛型不是模板,并且类型被删除).尽管如此,我认为一个运算符允许我在一个预期类型的??地方使用一种表达式 – 当然编译器必须能够计算一个表达式类型,否则就无法对val定义进行类型推断.

可以像下面一样使用decltype – 代码不会尝试做任何有用的事情,只是为了说明语法和基本用法:

case class A(x:Int = 0)

val a = new A(10)
val b = new decltype(a)

def f(c:decltype(a)) : decltype(a.x+a.x)

缺乏decltype是一个刻意的决定,还是有一些特定的原因,为什么Scala不能拥有它?是否有一些使用编译时反射的解决方案可以实现这一点?

解决方法

我的第一次刺伤:

class Decl[T] { type Type = T }
object Decl { def apply[T](x: T) = new Decl[T] }

例如,如果我们有一些变量x,其类型我们不想明确说明:

val d = Decl(x)
type TypeOfX = d.Type

(编辑:李大同)

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

    推荐文章
      热点阅读