斯卡拉深型嚼

时间:2014-04-18 12:32:10

标签: scala pattern-matching typechecking

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

def func: AnyRef

我们需要检查返回值是否为

Tuple2[String, String] 

List[Tuple2[String, List[String]]] 

List[Tuple2[String, List[Int]]] 

或其他任何内容。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

如果func是您无法控制的,我建议您创建一种数据类型来表示func可能返回的内容,并简单地从func返回}。它违背了类型安全的想法,以及#34;任何东西",所以我的答案将是帮助恢复类型安全。

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

希望Thing类的数量不是无限的。

这样,当您调用func时,您可以将其返回值与各种thing类进行匹配,并且您不必担心类型擦除(如果您不喜欢类型擦除,则必须这样做) #39; t以这种方式重构)