首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala类型错配[scala]

Scala类型错配[scala]
EN

Stack Overflow用户
提问于 2017-06-05 05:14:19
回答 3查看 739关注 0票数 0

我有以下功能

代码语言:javascript
复制
def weight(Actors:RDD[(String,Int)],name:String,count:Int):Float={
    val count1=Actors.lookup(name)
    val i_count=if (!count1.isEmpty) count1(0) else 0
    val edge=if (i_count!=0) (count.toFloat/i_count.toFloat) else 0.0   
}

我得到以下错误

代码语言:javascript
复制
 <console>:229: error: type mismatch;
 found   : Unit
 required: Float
       }

它是由0除法错误引起的吗?如何解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-05 05:22:05

weight函数不会返回任何内容,但是Float被定义为返回类型。

替换最后一行

代码语言:javascript
复制
val edge=if (i_count!=0) (count.toFloat/i_count.toFloat) else 0.0

通过

代码语言:javascript
复制
if (i_count!=0) (count.toFloat/i_count.toFloat) else 0F

应该解决你的问题

票数 0
EN

Stack Overflow用户

发布于 2017-06-05 05:30:07

此错误意味着您的是return Unit for weight方法,但是def weight(Actors:RDD[(String,Int)],name:String,count:Int):Float需要该方法的return Float值,因此此编译错误是抛出的

解决方案:

@Ramesh Maharjan提供了解决这一问题的方法。但是,您也可以在Scala中尝试模式匹配,例如:

代码语言:javascript
复制
i_count match {
  case 0 => 0.0F
  case _=> count.toFloat/i_count.toFloat
}
票数 0
EN

Stack Overflow用户

发布于 2017-06-05 05:31:26

不,这和零除法无关。将val定义为函数中的最后一行将被视为返回类型Unit。将其更改为以下内容将满足您为函数声明的Float返回类型:

代码语言:javascript
复制
if (i_count != 0) (count.toFloat / i_count.toFloat) else 0.toFloat
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44362062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档