【发布时间】:2018-10-03 18:23:18
【问题描述】:
问题
我需要创建一个字符串,在其中插入一个整数列表。
"""
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)} - 将 IO.inspect 与
:char_listsopt 与:as_list一起使用:IO.inspect(article_ids, char_lists: :as_lists - 尝试将整数列表作为字符串加入:
articleIds: [#{Enum.join(article_ids, ", ")}] - 将解析为字符串的整数插值:
Enum.map(article_ids, &Integer.to_string/1) |> Enum.join(", ") - 我尝试使用单行而不是多行字符串,但不起作用
- 尝试不同的解决方案后我不记得很多事情了...>.
猜测
在字符串中使用括号时会出现问题,Elixir 将插值视为一个列表并引发错误,因为它找不到代码点。
想法?
提前致谢!
【问题讨论】:
-
您想要的确切输出是什么?你尝试过的这些方法都没有奏效?
-
#{inspect(ids)}可能会工作。 -
@mudasobwa 不,它没有
-
@Dogbert 没有一个(以及其他更多)不起作用。我需要具有整数列表的强表示,以便能够使用该字符串作为主体进行网络调用(在我的代码 JFYI 中不使用网络库,它是使用 httpoison 的第三方 dep)。跨度>
-
另外,请确认
article_ids = [725553234]后跟带有插值分配的字符串在iex中失败。没有深入到项目代码中,只是这样:分配 ids ⇒ 分配插值字符串 ⇒ 繁荣。
标签: string-interpolation elixir