整数范围内的大小写匹配
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 个问题:
- 在 Elixir(和 Erlang)中进行模式匹配时,模式是从上到下评估的。在你的例子中,你有一个 catch all 子句(被忽略的变量
_
)在你的数字范围之上。
- 您正在检查范围
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
进行切片,这样第一个字符就不会被截断。
有没有办法在整数范围内进行匹配?我希望在一定数量的字符后去除字符,并添加一个省略号。这是我想做的,但在 1..32
.
def cutoff(title) do
case byte_size(title) do
_ -> title
1..32 -> String.slice(title, 1..32) <> " ..."
end
end
这里有 2 个问题:
- 在 Elixir(和 Erlang)中进行模式匹配时,模式是从上到下评估的。在你的例子中,你有一个 catch all 子句(被忽略的变量
_
)在你的数字范围之上。 - 您正在检查范围
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
进行切片,这样第一个字符就不会被截断。