Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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_Scala Collections - Fatal编程技术网

除了反射之外,有没有其他方法可以在Scala中创建泛型类型的实例

除了反射之外,有没有其他方法可以在Scala中创建泛型类型的实例,scala,scala-collections,Scala,Scala Collections,我是scala新手,在阅读了scala教程之后,我开始做一个简单的项目来进行一些练习 在我的项目中,我想通过创建一个隐式类来扩展seqtrait的功能,该类将封装Seq并在其上添加一些功能 我的问题是这样的: 隐式类包装器[S[X]尝试 导入scala.collection.Factory 隐式类包装器[S[X]如果您是Scala新手,这可能不是最好的起点。在尝试编写自己的集合类之前,最好先获得使用现有集合类的经验。如果您决定这样做,则必须重新创建类似于Scala-2.13中删除的概念的CanB

我是scala新手,在阅读了scala教程之后,我开始做一个简单的项目来进行一些练习

在我的项目中,我想通过创建一个隐式类来扩展seqtrait的功能,该类将封装Seq并在其上添加一些功能

我的问题是这样的:

隐式类包装器[S[X]尝试

导入scala.collection.Factory

隐式类包装器[S[X]如果您是Scala新手,这可能不是最好的起点。在尝试编写自己的集合类之前,最好先获得使用现有集合类的经验。如果您决定这样做,则必须重新创建类似于Scala-2.13中删除的概念的
CanBuildFrom
。隐式+子管道+类型推理永远不会一起很好地工作。但是funkyFunc从哪里获得工厂?如果我想使用此方法,我需要为我想要支持的每个集合创建一个函数,然后乘以隐式类中我实现的函数。这似乎有很多问题work@nhruo如果你创建了新的收藏,那么你一定要nt它的工厂。这是用手册@nhruo编写的,你通常不需要提供任何东西。隐式
def
s like通常会为每个具体的
E
s
自动提供
工厂。请在repl:
import collection.factory;隐式[factory[Any,Seq[Any]]
会给你一些东西。
隐式[Factory[String,Seq[Any]]]
会给你其他东西。同样,
隐式[Factory[String,List[String]]]
将再次略有不同。大多数组合都已包含在内。@Dmytro Mitin经过一番修补,我发现如果我的列表保存为Seq类型var myList:Seq[Int]=list(2,2,2),我可以运行您的示例。但当我试图将其转换为列表时,scala找不到隐式类。我认为scala使用的是来自iterableFactory对象的隐式iterableFactory,该对象也适用于列表,很抱歉,但我找不到缺少的内容。编辑:这是IntelliJ it中的一个错误compile@Dmytro在你的答案中输入+println(列表(1,2,3).funkyFunc)
总而言之,这是一个复杂的程序,但IntelliJ说它不会编译
import scala.collection.Factory

implicit class wrapper[S[X] <: Seq[X], E](seq : S[E]) {
  def funkyFunc(implicit f: Factory[S[E], S[S[E]]]) : S[S[E]] = {
    Seq(seq).to(f)
  }
}

List(1, 2, 3).funkyFunc // List(List(1, 2, 3))