使用路径相关类型作为类参数

阿列克谢·罗曼诺夫(Alexey Romanov)

我想拥有一个带有参数的类,该参数具有与类相关的类型,就像我通常对方法所做的那样。但是,令我惊讶的是,这没有用:

scala> trait Compiler { trait Config }
defined trait Compiler

// works fine, as expected
scala> def f(c: Compiler)(conf: c.Config) = {}
f: (c: Compiler)(conf: c.Config)Unit

scala> class F(val c: Compiler)(val conf: c.Config)
<console>:8: error: not found: value c
       class F(val c: Compiler)(val conf: c.Config)
                                          ^

为什么?有没有解决方法?

阿列克谢·罗曼诺夫(Alexey Romanov)

似乎可以接受的解决方法(如果F没有其他强制转换,则不能创建无效方法):

class F private (val c: Compiler)(_conf: Compiler#Config) {
  def conf = _conf.asInstanceOf[c.Config]
}

object F {
  def apply(c: Compiler)(conf: c.Config) = new F(c)(conf)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用通用类的参数作为事件类型

使用“类”或“类型名”作为模板参数?

使用参数化的TypeScript类作为类型参数

使用TypeScript声明类类型(将类作为参数)

如何使用模板化类作为参数类型?

使用泛型类作为类型参数的上限

使用类名作为方法参数和返回类型

使用类作为其方法中参数的类型提示

使用typedef-ed类型作为类模板参数

使用参数包作为模板类的类型名

查找使用类型'x'作为通用类型参数的实现通用类的类

何时使用预定义的类范围访问类型与匿名访问类范围类型作为参数?

如何使用使用参数包和类型名的类作为函数的输入参数(C ++)

使用接口作为通用类的类型参数,但在C#中使用“类”的限制

不能使用R作为化类型参数使用抽象类Kotlin中的类代替

不强制执行与路径相关的参数类型(?)

未知类型的 Kotlin 类作为方法参数

如何接受类类型的数组作为参数

嵌套类型作为基类的模板参数

类类型作为Java中的参数

将类的子类作为类型参数传递(类型参数是子类)

使用typeof作为参数类型

使用类型作为参数Typescript

使用枚举作为类型参数

返回类类型并将类类型作为参数

使用列表作为类参数

使用类对象作为类型

如何使用泛型类型数组和泛型类型类作为构造函数中的参数?

我可以使用类型作为值(或从构造函数参数正确推断通用类类型)吗?