我如何在 Elixir 中将 BitString 转换为字符串?

How can i convert a BitString into a String in Elixir?

我有一个函数可以接收字符串列表并将每个字符串连接成一个新字符串,我使用 Enum.join 来实现。但是当我尝试这个操作时,我得到以下错误:

** (Protocol.UndefinedError) protocol Enumerable not implemented for "int main(){return 2;}" of type BitString. This protocol is implemented for the following type(s): Date.Range, File.Stream, Function, GenEvent.Stream, HashDict, HashSet, IO.Stream, List, Map, MapSet, Range, Stream

我的解决方法是尝试将 BitString 转换为字符串,但我在 Elixir 的文档中找不到任何相关信息。 我的另一个解决方案是尝试根本不获取该 BitString,但我什至不知道为什么要获取该 BitString。

我正在做的过程是接收这样的列表:[{"int main(){return 2;}", 1}] 然后我列出了一个列表,但只使用字符串 text=Enum.map(words, fn {string, _} -> string end)

我尝试打印结果,所以我确定我给出了正确的参数;通过使用 IO.inspect(text),我得到了 ["int main(){return 2;}"],对我来说它看起来像一个字符串列表。

然后我使用 Enum.flat_map(text, &lex_raw_tokens(&1, line))

将其传递给一个函数

在那个函数里面,我做 def lex_raw_tokens(program,line) when program != "" do textString=Enum.join(program, " ")

这是我收到错误的地方。有什么方法可以将该 BitString 变回字符串或不获取该 BitString 吗?

抱歉,我仍在学习 Elixir,老实说,到目前为止,这是我学过的最难的语言,而且我遇到了很多麻烦。此外,这整个事情是我作为学校项目所做的小型 C 编译器的一部分

您将 text 绑定到 ["int main(){return 2;}"],然后您在 text 上执行 Enum.flat_map/2,因此在 lex_raw_tokens/2、[=15= 内] 绑定到 "int main(){return 2;}"。然后你试图在 program 上做一个 Enum.join/2,但因为它是一个字符串(这是一种 BitString),它是不可枚举的。