Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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_Apache Spark_Generics_Union Types_Apache Spark Encoders - Fatal编程技术网

不带任何Scala的联合泛型类型

不带任何Scala的联合泛型类型,scala,apache-spark,generics,union-types,apache-spark-encoders,Scala,Apache Spark,Generics,Union Types,Apache Spark Encoders,这很好: def echo[A, B](a: A, b: B): A = ??? 这也很好: def echo[A, B](a: A, b: B): B = ??? 然而,我们如何实现这一点以返回类型A或B // error def echo[A, B](a: A, b: B): A|B = ??? 是否可以简单地将通用类型a和B的联合类型? 干杯 更新1 或者都是一个选项,但并不理想,因为在处理返回的结果时需要模式匹配。实际上,我想要的是:A很快就会发布,Scala 3已经有了它 de

这很好:

def echo[A, B](a: A, b: B): A = ???
这也很好:

def echo[A, B](a: A, b: B): B = ???
然而,我们如何实现这一点以返回类型A或B

// error
def echo[A, B](a: A, b: B): A|B = ???
是否可以简单地将通用类型aB联合类型? 干杯


更新1


或者
都是一个选项,但并不理想,因为在处理返回的结果时需要模式匹配。实际上,我想要的是:
A很快就会发布,Scala 3已经有了它

def echo[A, B](a: A, b: B): A|B = ???  //this compiles

可以看出,

嗯,听起来像C++的函数特化会很方便。here@smac89谢谢你,很高兴知道。但它似乎只适用于特定类型,这意味着它不能执行
def echo[@specialized(A,B)AB](A:A,B:B,AB:AB)=?
(其中
A
B
是泛型)。其次,它似乎无法返回一个
@specialized
类型,例如
def echo[a,B](a:a,B:B):@specialized(a,B)=???
这两个错误@迪玛,谢谢
或者
都不错,但在处理返回结果时需要模式匹配。实际上,我希望这样:
联合类型还需要模式匹配。感谢您的帮助。在Scala2.11中,它仍然没有编译,有没有办法做到这一点?
def echo[A, B](a: A, b: B): Dataset[A|B] = ???
def echo[A, B](a: A, b: B): Dataset[Either[A, B]] = ???
val result1: Either[Cat, Dog] = echo(a: Cat, b: Dog)
val result2: Either[Either[Cat, Dog], Pig] = echo(result1: Either[Cat, Dog], c: Pig)

// we have to define encoders:
implicit encoder1: org.apache.spark.sql.Encoders.kryo[Either[Cat, Dog]]
implicit encoder2: org.apache.spark.sql.Encoders.kryo[Either[Either[Cat, Dog], Pig]]

// if we keep iterating, then too many encoders to define...
def echo[A, B](a: A, b: B): A|B = ???  //this compiles