Несколько уравниваемых функций в одном классе - PullRequest
0 голосов
/ 11 ноября 2018

Я хотел бы знать, возможно ли иметь несколько функций Equatable в одном классе. Моя текущая проблема из этого примера:

class Ingredient: Equatable {

static func == (lhs: Ingredient, rhs: Ingredient) -> Bool {
    return lhs.ingredientId == rhs.ingredientId && lhs.price == rhs.price
}

//    static func == (lhs: Ingredient, rhs: Ingredient) -> Bool {
//        return lhs.ingredientId == rhs.ingredientId && lhs.price == rhs.price && lhs.quantity == rhs.quantity
//    }
}

Как видите, я хотел бы прокомментировать функцию равенства, но она не работает таким образом, потому что у меня уже есть такая. Мне нужно, чтобы обе функции работали. Есть ли оптимальное решение для этого?

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

У вас не может быть нескольких определений функции ==() (функция, которая дает вам соответствие экватируемому протоколу), но вы можете написать сложную реализацию вашей функции ==(), которая использует более сложную логику, чтобы решить, как сравнить два объекта. Вы даже можете добавить переменную класса в свой класс, и ваша функция ==() будет использовать эту переменную при принятии решения о том, как сравнивать значения, хотя это выглядит как плохой дизайн.

0 голосов
/ 11 ноября 2018

Нет, вы не можете.

Из математического определения функции:

Функция - это процесс или отношение, которое связывает каждый элемент x набора X, область функции, с единственным элементом y другого набора Y (возможно, того же самого набора), кодомен функции.

Как правило, определяя несколько функций с одинаковыми именами, которые принимают аргументы одинаковых типов , вы создаете неоднозначность, которая приводит к непредсказуемым результатам. Таким образом, это поведение приведет к ошибке времени компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...