我需要创建一个字符串,在其中插入一个整数列表。
"""
SomeQuery {
someQuery(articleIds: #{inspect article_ids}) {
edges {
node {
id
}
}
}
}
"""
例如,列表[725553234]
使上面的示例失败:
article_ids = [725553234]
"""
SomeQuery {
someQuery(articleIds: #{article_ids}) {
edges {
node {
id
}
}
}
}
"""
** (exit) an exception was raised: ** (UnicodeConversionError) invalid code point 725553234 (elixir) lib/list.ex:839: List.to_string/1 (commsapp_api) lib/my_project/client.ex:70: CommsappApi.News.Clients.CommunicationMs.Client.articles_feed/3
Erlang / OTP 20 [erts-9.3] [来源] [64位] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Elixir 1.6.3(使用OTP 20编译)
尝试了以下内容:
inspect
无效:articleIds: #{inspect(article_ids)}
:char_lists
的{{1}}选项的IO.inspect::as_list
IO.inspect(article_ids, char_lists: :as_lists
articleIds: [#{Enum.join(article_ids, ", ")}]
当使用字符串中的括号时出现问题,Elixir将interporlation视为列表并引发错误,因为它无法找到代码点。
想法?
提前致谢!
答案 0 :(得分:1)
在strings, binaries and charlists的文档中,字符串被定义为点代码列表,即整数。代码
article_ids = [725553234]
"#{article_ids}"
尝试打印点代码为725553234
的字符。此点代码未定义,您将收到错误。将725553234
替换为65
,您应该获得A
个字符。
要插入整数列表,您可能需要执行以下操作:
iex(5)> a=[65, 66, 67]
'ABC'
iex(6)> "#{Enum.map(a, fn(c) -> Integer.to_string(c)<>" " end)}"
"65 66 67 "
顺便说一下,如果查看列表[65, 66, 67]
,则会将其解释为'ABC'
。
答案 1 :(得分:0)
使用Enum.join返回字符串,并用“,”分隔整数
Enum.join(list, ",")
或通过将每个整数值更改为字符串来使用Enum.map作为列表返回
Enum.map(list, &Integer.to_string/1)
列表= [1、2、3、4]
Enum.join(list, ",") -> "1,2,3,4"
Enum.map(list, &Integer.to_string/1) -> ["1", "2", "3", "4"]