所以我尝试将此字符串解析为两个整数列表:
69 12 75 19 83 56 73 53 52 91 | 83 63 56 30 77 94 12 81 42 69 52 70 6 97 20 43 61 22 75 19 73 32 74 53 91
这有效:
[results_s, owned_s] =
data_string
|> String.split("|")
|> Enum.map(&String.trim/1)
|> Enum.map(&String.split(&1, ~r/\s+/))
results = results_s
|> Enum.map(&String.to_integer/1)
owned = owned_s
|> Enum.map(&String.to_integer/1)
但我希望避免中间作业的需要。我试过这个:
[results_s, owned_s] =
data_string
|> String.split("|")
|> Enum.map(&String.trim/1)
|> Enum.map(&String.split(&1, ~r/\s+/))
|> Enum.map(&Enum.map(&1, &String.to_integer/1))
但是出现有关嵌套捕获的错误。
还有这个:
[results_s, owned_s] =
data_string
|> String.split("|")
|> Enum.map(&String.trim/1)
|> Enum.map(&String.split(&1, ~r/\s+/))
|> Enum.map(fn (left, right ->
{
left |> Enum.map(&String.to_integer/1),
right |> Enum.map(&String.to_integer/1)
}
end)
但出现此错误:
解析:卡1:69 12 75 19 83 56 73 53 52 91 | 83 63 56 30 77 94 12 81 42 69 52 70 6 97 20 43 61 22 75 19 73 32 74 53 91 ** (FunctionClauseError) CardParser.parse_card/1 中的匿名 fn/1 中没有匹配的函数子句
The following arguments were given to anonymous fn/1 in CardParser.parse_card/1: # 1 ["69", "12", "75", "19", "83", "56", "73", "53", "52", "91"]
我是不是想太多了?这怎么办?
无法使用嵌套捕获,但嵌套匿名函数仍然有效。
data_string
|> String.split("|")
|> Enum.map(fn e ->
~r/\d+/
|> Regex.scan(e)
|> List.flatten()
|> Enum.map(&String.to_integer/1)
end)
#⇒ [
# [69, 12, 75, 19, 83, 56, 73, 53, 52, 91],
# [83, 63, 56, 30, 77, 94, 12, 81, 42, 69, 52, 70, 6, 97, 20, 43, 61, 22, 75,
# 19, 73, 32, 74, 53, 91]
# ]