在整数范围内进行大小写匹配



是否有匹配整数范围的方法?我正在寻找剥字符后一定数量的字符,并添加一个省略号。这是我想做的,但在1..32上不匹配。

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

有两个问题:

    当Elixir(和Erlang)中的模式匹配时,模式将从上到下进行评估。在您的示例中,在您的数字范围上方有一个catch all子句(被忽略的变量_)。
  1. 您正在检查范围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

你可能还想从0而不是1中切片,这样第一个字符就不会被切断。

最新更新