Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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 Var arg方法只接受原语或Seq[原语]_Scala - Fatal编程技术网

Scala Var arg方法只接受原语或Seq[原语]

Scala Var arg方法只接受原语或Seq[原语],scala,Scala,如何创建只接受原语或其Seq的方法?此外,它应该是var arg def methodargs:Param* 例如,其中arg是 method(1: Int, 1l: Long, "1": String, Seq(1, 3, 7)) 第二个条件是它不能接受值类定义如下参数: sealed abstract class Param object Param { implicit final class IntParam(val x: Int) extends Param implici

如何创建只接受原语或其Seq的方法?此外,它应该是var arg

def methodargs:Param*

例如,其中arg是

method(1: Int, 1l: Long, "1": String, Seq(1, 3, 7))
第二个条件是它不能接受值类定义如下参数:

sealed abstract class Param

object Param {
  implicit final class IntParam(val x: Int) extends Param
  implicit final class StringParam(val x: String) extends Param
  ...
  implicit final class SeqParam(val seq: Seq[Param]) extends Param
}
如下定义参数:

sealed abstract class Param

object Param {
  implicit final class IntParam(val x: Int) extends Param
  implicit final class StringParam(val x: String) extends Param
  ...
  implicit final class SeqParam(val seq: Seq[Param]) extends Param
}

缺点之一是,在我使用方法的每个地方,我都需要显式导入Param。第二个问题是转换。对于每个参数,都创建了Param包装器实例,我必须避免不必要的内存分配。我在编译器级别寻找一些东西,比如声明类型Param=AnyVal或Seq[AnyVal],您不需要导入Param。\因为它是Param的伴生对象。然而,你有包装纸。我看不出有什么办法可以解决这个问题。@Przemek使用AnyVal作为约束实际上是行不通的,因为您可以生成任何类型的AnyVal,其中包含您想要的任何内容。缺点之一是,在我使用方法的每个地方,我都需要显式导入参数。\第二个问题是转换。对于每个参数,都创建了Param包装器实例,我必须避免不必要的内存分配。我在编译器级别寻找一些东西,比如声明类型Param=AnyVal或Seq[AnyVal],您不需要导入Param。\因为它是Param的伴生对象。然而,你有包装纸。我看不出有什么办法。@Przemek使用AnyVal作为约束实际上是行不通的,因为您可以生成任何类型的AnyVal,其中包含您想要的任何内容。