Scala Var arg方法只接受原语或Seq[原语]
如何创建只接受原语或其Seq的方法?此外,它应该是var arg def methodargs:Param* 例如,其中arg是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
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,其中包含您想要的任何内容。