有时可能需要声明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
关于scala - 为什么Scala没有decltype?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29038214/