整数范围的大小写匹配

roc*_*BOO 15 elixir

有没有办法在整数范围内匹配?我想在一定数量的字符后删除字符,并添加省略号.这是我想要做的,但不匹配1..32.

def cutoff(title) do
    case byte_size(title) do
      _ -> title
      1..32 -> String.slice(title, 1..32) <> " ..."
    end
end
Run Code Online (Sandbox Code Playgroud)

Gaz*_*ler 17

这里有两个问题:

  1. 当Elixir(和Erlang)中的模式匹配时,模式从上到下进行评估.在您的情况下,您_的数字范围之上有一个catch all子句(被忽略的变量).
  2. 您正在检查范围的值1..32- byte_size不会返回范围,它将返回一个整数.如果你想在一个范围内检查,那么你必须使用一个警卫.

如果您交换比赛顺序并使用后卫,那么它将起作用:

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

您可能还希望切片,0而不是1第一个字符不会被切断.