整数范围内的大小写匹配

Case match on integer range

有没有办法在整数范围内进行匹配?我希望在一定数量的字符后去除字符,并添加一个省略号。这是我想做的,但在 1..32.

上不匹配
def cutoff(title) do
    case byte_size(title) do
      _ -> title
      1..32 -> String.slice(title, 1..32) <> " ..."
    end
end

这里有 2 个问题:

  1. 在 Elixir(和 Erlang)中进行模式匹配时,模式是从上到下评估的。在你的例子中,你有一个 catch all 子句(被忽略的变量 _)在你的数字范围之上。
  2. 您正在检查范围 1..32 的值 - byte_size 不会 return 一个范围,它将 return 一个整数。如果你想在一个范围内检查,那么你必须使用 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 进行切片,这样第一个字符就不会被截断。