Я наткнулся на этот вопрос: В Scala, как бы я смоделировал банковский счет в режиме без сохранения состояния? . Предлагаемое решение выглядит правдоподобно:
// Here is the important part of the answer
class Account(balance: Int) {
def deposit(amount: Int): Account // the implementation was left out...
}
Проблема с этим решением заключается в том, что основной конструктор является общедоступным. Поэтому, если пользователь-программист создает новую учетную запись, он может передать ей произвольное значение. Что, если я всегда хочу, чтобы это было ноль? В любом случае, это новый аккаунт, почему его сумма должна быть не равна нулю?
Насколько я знаю, невозможно сделать открытый класс с закрытым первичным конструктором. С другой стороны, это возможно для вспомогательного конструктора быть личным , именно это я и пытался сделать.
class Account {
val balance = 0
private def this(amount: Int) = {
this()
balance = amount // won't compile since balance is a val
}
def deposit(amount: Int): Account = new Account(balance + amount)
}
Я точно знаю, в чем проблема, но я не знаю, как ее исправить, что немного смущает ...