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

Scala深型支票

Scala深型支票,scala,pattern-matching,typechecking,Scala,Pattern Matching,Typechecking,我们有一个函数可以返回任何内容: def func: AnyRef 我们需要检查返回值是否为 Tuple2[String, String] 或 或 或者别的什么 正确的方法是什么?如果func在您的控制之下,我建议创建一个数据类型来表示func可以返回的可能的内容,只需从func返回即可。返回“任何东西”都违背了类型安全的理念,因此我的答案是帮助恢复类型安全 sealed trait FuncReturnType case class Thing1(data: (String,String

我们有一个函数可以返回任何内容:

def func: AnyRef
我们需要检查返回值是否为

Tuple2[String, String] 

或者别的什么


正确的方法是什么?

如果
func
在您的控制之下,我建议创建一个数据类型来表示
func
可以返回的可能的内容,只需从
func
返回即可。返回“任何东西”都违背了类型安全的理念,因此我的答案是帮助恢复类型安全

sealed trait FuncReturnType
case class Thing1(data: (String,String)) extends FuncReturnType
case class Thing2(data: List[(String, List[String])]) extends FuncReturnType
case class Thing3(data: List[(String, List[Int])]) extends FuncReturnType
...

def func: FuncReturnType
希望
类的数量不是无限的


这样,当您调用func时,您可以将其返回值与各种
对象
类相匹配,并且您不必担心类型擦除(如果不以这种方式重构,您将不得不这样做)

重构以避免使用这个愚蠢的函数??)@vptheron的代码太多,无法重构。我希望有一个解决办法。谢谢,在我的特殊情况下,它可以帮助。但是仍然有一个共同的任务,它不应该是共同的,一般来说,对于有经验的Scala程序员来说,它不是。这些类型不连贯,需要更好的设计。
List[Tuple2[String, List[Int]]] 
sealed trait FuncReturnType
case class Thing1(data: (String,String)) extends FuncReturnType
case class Thing2(data: List[(String, List[String])]) extends FuncReturnType
case class Thing3(data: List[(String, List[Int])]) extends FuncReturnType
...

def func: FuncReturnType