Подтвердить что ты не робот

Совпадение по целому ряду

Есть ли способ сопоставления целочисленного диапазона? Я ищу, чтобы полоса символов после определенного количества символов и добавить многоточие. Это то, что я хочу сделать, но не соответствует 1..32.

def cutoff(title) do
    case byte_size(title) do
      _ -> title
      1..32 -> String.slice(title, 1..32) <> " ..."
    end
end
4b9b3361

Ответ 1

Здесь есть 2 вопроса:

  • При сопоставлении образцов в Elixir (и Erlang) шаблоны оцениваются сверху вниз. В вашем случае у вас есть предложение catch all (игнорируемая переменная _) над вашим номером.
  • Вы проверяете значение для диапазона 1..32 - byte_size не будет возвращать диапазон, он вернет целое число. Если вы хотите проверить в пределах диапазона, вы должны использовать guard.

Если вы меняете порядок своих совпадений и используете охранник, он будет работать:

def cutoff(title) do
    case byte_size(title) do
      x when x in 1..32 -> String.slice(title, 1..32) <> " ..."
      _ -> title
    end
end

Вы также можете отрезать от 0 вместо 1, чтобы первый символ не обрезался.