LINUX.ORG.RU

История изменений

Исправление eao197, (текущая версия) :

Я ничего не знаю про swift,

Но мнение имеете? Иначе как объяснить вашу попытку что-то рассказать про Swift?

но попробовал бы добавить слово `mutating` перед функцией `increment`

Во-первых, метод класса, не помеченный как mutating, меняет значение объекта, задекларированного через let. Здравый смысл подсказывает, что такого быть не должно.

Во-вторых, использовать mutating можно либо в struct, либо в enum. Вот так уже будет ошибка компиляции:

struct Counter {
    var count = 0
    mutating func increment() {
        self.count += 1
    }
    mutating func increment(by amount: Int) {
        self.count += amount
    }
    mutating func reset() {
        self.count = 0
    }
    func current() -> Int {
        return self.count;
    }
}

let c = Counter();
print("c: ", c.current());
// c.increment();
print("c: ", c.current());

Но вопрос про иммутабельность экземпляра класса остается.

Тогда как в D этого вопроса нет в принципе, вне зависимости от использования struct/class (емнип).

Исходная версия eao197, :

Я ничего не знаю про swift,

Но мнение имеете? Иначе как объяснить вашу попытку что-то рассказать про Swift?

но попробовал бы добавить слово `mutating` перед функцией `increment`

Во-первых, метод класса, не помеченный как mutating, меняет значение объекта, задекларированного через let. Здравый смысл подсказывает, что такого быть не должно.

Во-вторых, использовать mutating можно либо в struct, либо в enum. Вот так уже будет ошибка компиляции:

struct Counter {
    var count = 0
    mutating func increment() {
        self.count += 1
    }
    mutating func increment(by amount: Int) {
        self.count += amount
    }
    mutating func reset() {
        self.count = 0
    }
    func current() -> Int {
        return self.count;
    }
}

let c = Counter();
print("c: ", c.current());
// c.increment();
print("c: ", c.current());[/swift]

Но вопрос про иммутабельность экземпляра класса остается.

Тогда как в D этого вопроса нет в принципе, вне зависимости от использования struct/class (емнип).