在Scala中如何匹配函数签名中的类型成员?
由于我正在使用的特定库涉及宏和序列化,因此我选择尝试使用类型成员而不是类的类型参数(背景:)在Scala中如何匹配函数签名中的类型成员?,scala,Scala,由于我正在使用的特定库涉及宏和序列化,因此我选择尝试使用类型成员而不是类的类型参数(背景:) 命令{ 类型M您可以使用改进的类型定义函数参数: def runInSystem(cmd: Command { type M <: SysCmdMetaData }) = { } 手动指定传递给runInSystem的变量的类型成员: runInSystem(new Command { type M = SysCmdMetaData val meta = SysCmdMetaData(
命令{
类型M您可以使用改进的类型定义函数参数:
def runInSystem(cmd: Command { type M <: SysCmdMetaData }) = { }
手动指定传递给runInSystem
的变量的类型成员:
runInSystem(new Command {
type M = SysCmdMetaData
val meta = SysCmdMetaData()
})
val cmd: Command { type M = SysCmdMetaData } = new Command {
type M = SysCmdMetaData
val meta = SysCmdMetaData()
}
runInSystem(cmd)
还可以使用类型参数定义类型别名:
object Command {
type Aux[M0 <: CommandMetaData] = Command { type M = M0 }
}
val cmd: Command.Aux[SysCmdMetaData] = ???
runInSystem(cmd)
对象命令{
键入Aux[M0我选择了您的第一个建议(因为我已经有了浮动的子类),但是您列出了这么多备选方案,这很好。
val cmd: Command { type M = SysCmdMetaData } = new Command {
type M = SysCmdMetaData
val meta = SysCmdMetaData()
}
runInSystem(cmd)
object Command {
type Aux[M0 <: CommandMetaData] = Command { type M = M0 }
}
val cmd: Command.Aux[SysCmdMetaData] = ???
runInSystem(cmd)