Я не уверен, знаете ли вы об этом, но в Scala (^
) уже есть побитовый оператор XOR, который вы, вероятно, предпочли бы.
Чтобы добавить методы расширения в booleans, вы не можете просто определить функцию, которая принимает 2 параметра. Вам нужно будет обернуть логическое значение в неявный класс и определить для него правильный метод.
implicit class Xorable(private val a: Boolean) extends AnyVal {
def xor(b: Boolean) = a ^ b
}
и только тогда вы сможете использовать его как true xor false
. Метод, который вы определили выше, может использоваться только как xor(a, b)
Изменить: как указал Луис Мигель Мехиа Суарес
Обычно рекомендуется создавать неявные классы быть классами значений.
Единственное, что у вас не может быть неявного класса значений, параметр которого является экземпляром другого класса значений. Поскольку Boolean
являются классами значений, вам придется либо не использовать классы значений, либо делать неявное определение в этом случае, но для потомков AnyRef
вы можете просто добавить extends AnyVal
к этому первому неявному классу . Фактически -
Ограничение применяется только к определяемым пользователем классам значений, вы можете сделать неявный класс логических значений классом значений
Кстати, вы можете просто сделать это в Dotty, насколько я знаю:
def (a: Boolean) xor (b: Boolean) = a ^ b