为什么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中似乎没有这样的设施. 对链接问题的回答告诉我们:
我不得不承认我不理解这一点.我不认为类型是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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |