Scala在if / else语句中返回对象类型

时间:2016-12-05 03:36:36

标签: java scala

目前我有一个名为example的抽象类,三个扩展抽象类的case类,以及一个返回类型为example的函数。在函数中,当满足某个条件时,它应该返回一个示例类型但由于某种原因它说:类型不匹配,找到:单位,必需:示例

我不明白为什么,因为我在每个if语句的末尾返回示例类型...

abstract class example
case class type1() extends example
case class type2() extends example
case class type3() extends example

def func(): example = {

if (condition)
return (val x= type1())

else if (condition)
return (val x= type2())

else if (condition)
return (val x= type3())
}

在主函数中,我调用func()

2 个答案:

答案 0 :(得分:3)

返回后括号的类型不是示例。

return (val x= type1())

甚至没有意义:你说x取一个特定的价值......然后回归这个事实。所以,如果你删除" val x =" (无论如何都是无用的),你得到:

return type1()

表示"通过创建type1"类型的新对象返回我刚刚指定的值。

另外,您应该尊重Scala命名约定。特别是,classe名称必须是驼峰式的:

abstract class Example
case class Type1() extends Example
case class Type2() extends Example
case class Type3() extends Example

另外,您多次评估相同的条件,并且没有充分的理由这样做。因此,您应该简化函数的定义方式。此外,您不应使用显式返回。类似的东西:

def func(): example = if (condition) Type1()
                      else Type2()

另请注意,在原始代码中,type2和type3对象永远不会实例化,因为 condition 始终为true,或者始终为false。

最后,您的函数有副作用,因为它的行为依赖于 condition ,它不是它的参数之一。你不应该这样做。

总之,您的源代码应该如下所示:

abstract class Example

case class Type1() extends Example
case class Type2() extends Example
case class Type3() extends Example

def func(condition: Boolean): Example = if(condition) Type1()
                                        else Type2()

答案 1 :(得分:0)

你忘了在最后一次之后实施其他阻止"否则如果"。

Scala方法返回其主体中的最后一个表达式的值,而条件brach没有else块的类型为Unit。因此错误。