Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中如何匹配函数签名中的类型成员?_Scala - Fatal编程技术网

在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)