我是 Elixir 的新手,我想收集以给定字符串开头的列表中的所有项目。如果我将字符串硬编码为
<>
运算符的左侧,则程序可以正常工作,否则我会收到错误 ArgumentError the left argument of <> operator inside a match should be always a literal binary as its size can't be verified.
defmodule StringStartsWith do
def search([]), do: []
def search(["Case"<> head | tail]), do: ["Case" <> head] ++ search(tail)
def search([_head | tail]), do: search(tail)
end
StringStartsWith.search(["CaseDown", "YoHua", "CaseUp"])
|> IO.puts()
我想知道如何使用变量作为
<>
运算符的左侧,该运算符将保存起始子字符串的值。带有一些解释的解决方案将真正帮助我的案例。
干杯, DD
不能使用变量作为
<>
运算符的左参数来以这种方式进行匹配。这就是错误消息试图告诉您的内容:
匹配中<>运算符的左参数应始终是文字二进制,因为其大小无法验证
强调我的。
String.starts_with?/1
:
def search(list, start) do
Enum.filter(list, &String.starts_with?(&1, start))
end
这适用于变量:
iex> StringStartsWith.search(["CaseDown", "YoHua", "CaseUp"], "Case")
["CaseDown", "CaseUp"]