case class Item(val brand: String, val count: Int)
class Inventory {
def add(amount:Int, item: Item): Item = {
if(amount>0)
item.copy(count = item.count+amount)
}
def subtract(amount:Int, item: Item): Item = {
if(amount>0)
item.copy(count = item.count-amount)
}
}
如何将else if语句添加到此代码中,以使该数量必须大于0?当我添加if语句时,我收到类型不匹配错误。
答案 0 :(得分:2)
问题是你的函数并不总是返回,函数总是要返回单个值。当amount
不大于零时会发生什么?我想你需要按原样返回item
。我们通过添加else语句来修复它。
def add(amount:Int, item: Item): Item = {
if(amount>0)
item.copy(count = item.count+amount)
else
item
}
答案 1 :(得分:2)
if
是scala中的表达式,因此它会计算为某些内容。如果你不放,那么编译器会为()
提供类型为Unit
的{{1}}。这将使您的表达式返回Unit
或Item
。他们的常见超类型为Any
,因此此表达式的类型实际为Any
,而预期类型为Item
def add(amount: Int, item: Item): Item = {
if(amount > 0)
item.copy(count = item.count + amount)
}
如果您想要要求金额大于零,只需检查它并抛出异常(如果不是)。您可以使用内置require
。
def add(amount: Int, item: Item): Item = {
require(amount > 0)
item.copy(count = item.count + amount)
}
或者你可以默默地处理这个问题,如果传递了错误的参数,就不要修改项目
def add(amount: Int, item: Item): Item = {
if(amount > 0)
item.copy(count = item.count + amount)
else
item
}
顺便说一下,你不需要在案例类中使用val,无论如何它都是val
。这应该是这样的:
case class Item(brand: String, count: Int)