Sum*_*uma 5 scala type-inference decltype
有时人们可能想要声明x与...相同的类型y.使用vals类型推断处理得非常好,但这在其他一些方面不起作用,例如函数类型.
一个程序员这似乎是显而易见的溶液与一些C++的经验将是一个decltype.目前的Scala似乎没有这样的设施.
对链接问题的回答告诉我们:
因为类型不是一等公民
我不得不承认我不理解这一点.我不认为类型是C++中的一等公民,但它仍然可以拥有decltype.我不是在询问有关decltype泛型中的类型参数或类似参数的任何内容(我理解泛型不是模板,并且类型被删除).尽管如此,我认为一个允许我在一个预期类型的地方使用一种表达式的运算符 - 当然编译器必须能够计算一个表达式类型,否则val就不可能进行类型推断以进行定义.
A 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)
Run Code Online (Sandbox Code Playgroud)
没有decltype刻意的决定,还是有一些特定的原因让Scala无法拥有它?是否有一些使用编译时反射的解决方案可以实现这一点?
我的第一次尝试:
class Decl[T] { type Type = T }
object Decl { def apply[T](x: T) = new Decl[T] }
Run Code Online (Sandbox Code Playgroud)
例如,如果我们有一些变量,x我们不想显式声明其类型:
val d = Decl(x)
type TypeOfX = d.Type
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |