Ответ 1
Гвардии более мощные, чем сопоставление с образцами, но они представляют собой сложный слой, который может оказаться ненужным. Для простых проверок равенства, как в вашем примере, они должны быть эквивалентны с точки зрения производительности. Я рекомендую сначала использовать совпадение шаблонов, чтобы все было просто. Затем вы можете вернуться к пункту охраны, если это абсолютно необходимо. Тем не менее, иногда может иметь смысл делать это иначе, когда это облегчает читаемость, например.
def sign(x) when x < 0, do: -1
def sign(x) when x == 0, do: 0
def sign(x) when x > 0, do: 1
Я полагаю, что "правильный" прецедент для оператора равенства в сторожевых предложениях - это когда он используется как часть более сложных выражений, например
def divisible?(x, divisor) when rem(x, divisor) == 0, do: true
def divisible?(_x, _divisor), do: false