if
является выражением в scala, поэтому он оценивает что-то. Если вы не ставите компилятор else, поставьте ()
для вас, который имеет тип Unit
. Это сделает ваше выражение возвратом 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
}
Кстати, вам не нужно Vals в случае класса, это будет val
в любом случае. Вот как это должно быть:
case class Item(brand: String, count: Int)
Помимо (что очень неважный по сравнению с использованием 'if' ** без **' else') - вы должны правильно отступов вашего 'если-statements' - сделать это читаемо. –